単体テスト用のモックアップメールサーバーとしてGreenMailを使用しようとしています。IMAP / POP3リクエストを待ってダミーメールを配信するのが仕事ですが、動作させることができません。
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());
}
ここでは問題ありません。これまでの出力は次のようになります。
**クラス:クラスjavax.mail.internet.MimeMessage **
差出人:someone@localhost.com
宛先:jdtest @ localhost
件名:テストEメール
内容:これはテスト用の電子メールです。
その後、GreenMailIMAPサーバーからメールを取得しようとします。
// 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
**クラス:クラスcom.sun.mail.imap.IMAPMessage **
およびFolderClosedException:
javax.mail.FolderClosedException:* BYE JavaMail Exception:com.sun.mail.imap.IMAPMessage.loadEnvelope(IMAPMessage.java:1217)at com.sun.mail.imap.IMAPMessage.getFrom(IMAPMessage。 java:252)at jd.controlling.EMailMonitoringTest.test(EMailMonitoringTest.java:85)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)at sun.reflect .DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:601)at org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall(FrameworkMethod.java:44)at org org.junit.runners.model.FrameworkMethodの.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)。invokeExplosively(FrameworkMethod.java:41)at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)at 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。 org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)のschedule(ParentRunner.java:52)org.junit.runners.ParentRunner.access $ 000(ParentRunner。java:42)org.junit.runners.ParentRunner $ 2.evaluate(ParentRunner.java:184)at org.junit.runners.ParentRunner.run(ParentRunner.java:236)atorg.eclipse.jdt.internal.junit4。 runner.JUnit4TestReference.run(JUnit4TestReference.java:50)at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)atorg.eclipse.jdt.internal.junit.runner.RemoteTestRunner。 runTests(RemoteTestRunner.java:467)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner。 java:390)org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)java:236)org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)at 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(RemoteTestRunner.java:683)at org.eclipse .jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)java:236)org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)at 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(RemoteTestRunner.java:683)at org.eclipse .jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)runTests(RemoteTestRunner.java:467)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner。 java:390)org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)runTests(RemoteTestRunner.java:467)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)at 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が発生しますが、配列に格納されているクラスIMAPMessageのメッセージが1つあります。誰かがこれについて知っていますか?
はい、hashCodeで例を試しましたが、同じ理由で失敗します...受信したIMAPメッセージのプロパティにアクセスするときにFolderClosedExceptionが発生します...
ありがたいことに、どんなヒントも受け入れます。