2013-03-25 109 views
2

我试图使用GreenMail作为模型邮件服务器进行单元测试。它的工作是等待IMAP/POP3请求并发送虚拟邮件,但我无法使其工作。无法访问GreenMail收到的电子邮件的属性

public class EMailMonitoringTest { 
private static final String USER_PASSWORD = "test"; 
private static final String USER_NAME = "jDownloaderTestUser"; 
private static final String EMAIL_USER_ADDRESS = "[email protected]"; 
private static final String EMAIL_TO = "[email protected]"; 
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()); 
    } 

这里没有问题,输出到目前为止是什么样子:

**类:类的javax.mail.internet.MimeMessage **

来源:有人@本地.COM

要:jdtest @本地

主题:测试电子邮件

内容:这是一封测试电子邮件。

在那之后,我尝试从讹诈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:* BYE JavaMail的例外: java.io.IOException的在 com.sun.mail.imap.IMAPMessage.loadEnvelope(IMAPMessage.java:1217)在 com.sun.mail.imap.IMAPMessage.getFrom(IMAPMessage.java:252)在 jd.controlling.EMailMonitoringTest.test(EMailMonitoringTest.java:85) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Delegati ngMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:601)在 org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall(FrameworkMethod.java:44) 在 组织。 junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 在 org.junit.runners.model.FrameworkMethod.invokeExplosively(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.RunAfters。评估(RunAfters.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) at org.junit.runners.ParentRunner $ 3.run(ParentRunner.java:193)at org.junit.runners.ParentRunner $ 1。日程表(ParentRunner.java:52) org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)at org.junit.runners.ParentRunner.access $ 000(ParentRunner.java:42)at org.junit .runners.ParentRunner $ 2.evaluate(ParentRunner.java:184)at org.junit.runners.ParentRunner.run(ParentRunner.java:236)at 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) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTes tRunner.java:683) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main( RemoteTestRunner.java:197)

尝试访问folder.getMessage(0)只导致IndexOutOfBoundsException异常,但存储在Array类IMAPMessage的一个消息。有人知道这个吗?

是啊,我访问收到IMAP邮件的属性...

感激会接受任何提示,当试图实例上hashCode,但他们也无法以相同的理由... FolderClosedException。

+0

尝试远程登录,首先验证您所得到的邮件和您的IMAP服务器工作正常。 – Anshul 2013-03-25 04:31:49

+0

我可以看到新消息,但只要我想获取它,测试类就会崩溃,但出现以下异常: java.lang.RuntimeException:无法启动至少一个邮件服务。 \t在com.icegreen.greenmail.util.GreenMail.start(来源不明) \t在jd.controlling.EMailMonitoringTest.setUp(EMailMonitoringTest.java:44) \t在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) \t at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ...所以IMAP服务器不能正常工作。 : -/ – RyuX51 2013-03-25 06:36:14

回答

0

使用IMAP时,您配置LOCALHOST,但从未告知GreenMail在启动/创建GreenMail时使用LOCALHOST。

使用讹诈服务器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();` 
+0

这个问题已经很老了,不再适用于我。如果有人有同样的问题,试试这个答案,它的工作原理,请告诉我,以便我可以接受这个答案。 :) – RyuX51 2015-03-05 16:43:50

相关问题