Java Can';t访问GreenMail接收的电子邮件的属性
我正在尝试使用GreenMail作为单元测试的邮件服务器模型。它的工作是等待IMAP/POP3请求并发送一封虚拟邮件,但我无法让它工作Java Can';t访问GreenMail接收的电子邮件的属性,java,email,imap,greenmail,Java,Email,Imap,Greenmail,我正在尝试使用GreenMail作为单元测试的邮件服务器模型。它的工作是等待IMAP/POP3请求并发送一封虚拟邮件,但我无法让它工作 public class EMailMonitoringTest { private static final String USER_PASSWORD = "test"; private static final String USER_NAME = "jDownloaderTestUser"; private static final String EMAI
public class EMailMonitoringTest {
private static final String USER_PASSWORD = "test";
private static final String USER_NAME = "jDownloaderTestUser";
private static final String EMAIL_USER_ADDRESS = "jdtest@localhost";
private static final String EMAIL_TO = "someone@localhost.com";
private static final String EMAIL_SUBJECT = "Test E-Mail";
private static final String EMAIL_TEXT = "This is a test e-mail.";
private static final String LOCALHOST = "127.0.0.1";
private GreenMail mailServer;
@Before
public void setUp() {
mailServer = new GreenMail(ServerSetupTest.ALL);
mailServer.start();
}
@After
public void tearDown() {
mailServer.stop();
}
@Test
public void getMails() throws AddressException, MessagingException, FolderException, UserException, IOException {
// create user on mail server
GreenMailUser user = mailServer.setUser(EMAIL_USER_ADDRESS, USER_NAME, USER_PASSWORD);
// create an e-mail message using javax.mail ..
MimeMessage message = new MimeMessage((Session) null);
message.setFrom(new InternetAddress(EMAIL_TO));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(EMAIL_USER_ADDRESS));
message.setSubject(EMAIL_SUBJECT);
message.setText(EMAIL_TEXT);
// use greenmail to store the message
user.deliver(message);
// check received messages
Message[] messages = mailServer.getReceivedMessages();
for (Message m : messages) {
System.out.println("*** Class: " + m.getClass() + " ***");
System.out.println("From: " + m.getFrom()[0]);
System.out.println("To: " + m.getRecipients(Message.RecipientType.TO)[0]);
System.out.println("Subject: " + m.getSubject());
System.out.println("Content: " + m.getContent());
}
这里没有问题,到目前为止的输出是这样的:
**类:Class javax.mail.internet.mimessage**
发件人:someone@localhost.com
致:jdtest@localhost
主题:测试电子邮件
内容:这是一封测试电子邮件
之后,我尝试从GreenMail IMAP服务器获取邮件:
// fetch the e-mail via imap using javax.mail ..
Properties props = new Properties();
Session session = Session.getInstance(props);
URLName urlName = new URLName("imap", LOCALHOST,
ServerSetupTest.IMAP.getPort(), null, user.getLogin(),
user.getPassword());
Store store = session.getStore(urlName);
store.connect();
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
messages = folder.getMessages();
System.out.println("Size of Messages: " + messages.length);
for (Message m : messages) {
System.out.println("** Class: " + m.getClass() + " **");
System.out.println("From: " + m.getFrom()[0].toString());
System.out.println("To: " + m.getRecipients(Message.RecipientType.TO)[0].toString());
System.out.println("Subject: " + m.getSubject().toString());
System.out.println("Content: " + m.getContent().toString());
}
我的报酬是
邮件大小:1
**类:Class com.sun.mail.imap.IMAPMessage**
和FolderClosedException:
javax.mail.FolderClosedException:*再见JavaMail异常:
java.io.ioat异常
com.sun.mail.imap.IMAPMessage.loadEnvelope(IMAPMessage.java:1217)位于
com.sun.mail.imap.IMAPMessage.getFrom(IMAPMessage.java:252)位于
test(EMailMonitoringTest.java:85)
位于的sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
invoke(NativeMethodAccessorImpl.java:57)
在
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
位于java.lang.reflect.Method.invoke(Method.java:601)
org.junit.runners.model.FrameworkMethod$1.runReflectCall(FrameworkMethod.java:44)
在
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
在
org.junit.runners.model.FrameworkMethod.invokeeexplosive(FrameworkMethod.java:41)
在
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
在
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
在
org.junit.internal.runners.statements.runafter.evaluate(runafter.java:31)
在
org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
在
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
在
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
位于org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)位于
org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)位于
org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)位于
org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)位于
org.junit.runners.ParentRunner.run(ParentRunner.java:236)位于
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
在
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
在
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
在
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
在
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
在
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
尝试访问文件夹.getMessage(0)只会导致IndexOutOfBoundsException,但数组中存储了一条IMAPMessage类的消息。有人知道这件事吗
啊,是的,我试过这些例子,但它们也失败了,原因也是一样的。。。访问收到的IMAP消息的属性时发生FolderClosedException
感谢您接受任何提示。在使用IMAP时,您配置了LOCALHOST,但在启动/创建GreenMail时从未告诉GreenMail使用LOCALHOST 使用GreenMail服务器的绑定地址ServerSetupTest.IMAP.getBindAddress()而不是LOCALHOST:
// fetch the e-mail via imap using javax.mail ..
// Hint: Create session via GreenMailUtil
Session session = GreenMailUtil.getSession(ServerSetupTest.IMAP);
// Use configured host address instead of supplying a
URLName urlName = new URLName("imap", ServerSetupTest.IMAP.getBindAddress(),
ServerSetupTest.IMAP.getPort(), null, user.getLogin(),
user.getPassword());
Store store = session.getStore(urlName);
store.connect();`
通过命令提示符尝试telnet,以首先验证您正在接收邮件,并且您的IMAP服务器工作正常。我可以看到新邮件,但只要我想获取它,测试类就会崩溃,出现以下异常:java.lang.RuntimeException:无法启动至少一个邮件服务。com.icegreen.greenmail.util.greenmail.start(未知源代码)在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)在jd.controlling.EMailMonitoringTest.setUp(EMailMonitoringTest.java:44)。。。因此IMAP服务器工作不正常:-/这个问题已经很老了,对我来说不再重要了。如果有人有同样的问题,尝试这个答案,并且它有效,请告诉我,以便我可以接受这个答案。:)好的。为了完整性起见,我接受了fopr,因为我不能再测试它了。