GreenMailを使ってメール送信のテストを行う
GreenMail
メール送信機能の開発において、テストを実施するのに便利です。
greenmail-mail-test.github.io
build.gradle
dependencies { implementation 'com.sun.mail:jakarta.mail:1.6.7' testImplementation 'com.icegreen:greenmail:1.6.3' testImplementation 'com.icegreen:greenmail-junit5:1.6.3' testRuntimeOnly 'org.slf4j:slf4j-api:1.7.30' testRuntimeOnly 'org.slf4j:slf4j-simple:1.7.30' // This dependency is used by the application. implementation 'com.google.guava:guava:29.0-jre' testImplementation('junit:junit:4.13') }
JakartaMailTest.java
package jakarta_mail; import java.util.Properties; import javax.mail.Message.RecipientType; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import com.icegreen.greenmail.util.GreenMail; import com.icegreen.greenmail.util.ServerSetupTest; public class JakartaMailTest { private GreenMail greenMail; @Before public void before() { this.greenMail = new GreenMail(ServerSetupTest.SMTP); this.greenMail.start(); } @After public void after() { this.greenMail.stop(); } @Test public void testTransportSend() throws Exception { // 送信先メールサーバの設定 Properties props = new Properties(); props.put("mail.smtp.host", "127.0.0.1"); props.put("mail.smtp.port", "3025"); Session session = Session.getInstance(props, null); // メール内容の準備 String from = "test_from@example.com"; String to = "test_to@example.com"; String subject = "テスト件名"; String text = "テスト本文"; // メールの組み立て MimeMessage sendMessage = new MimeMessage(session); sendMessage.setFrom(new InternetAddress(from)); sendMessage.setRecipient(RecipientType.TO, new InternetAddress(to)); sendMessage.setSubject(subject, "UTF-8"); sendMessage.setText(text, "UTF-8"); // メール送信 Transport.send(sendMessage); // メール送信結果を取得 MimeMessage[] receivedMessages = this.greenMail.getReceivedMessages(); Assert.assertEquals(1, receivedMessages.length); // メール内容を確認 MimeMessage receivedMessage = receivedMessages[0]; Assert.assertEquals(1, receivedMessage.getFrom().length); Assert.assertEquals(from, receivedMessage.getFrom()[0].toString()); Assert.assertEquals(1, receivedMessage.getRecipients(RecipientType.TO).length); Assert.assertEquals(to, receivedMessage.getRecipients(RecipientType.TO)[0].toString()); Assert.assertEquals(subject, receivedMessage.getSubject()); Assert.assertEquals(text, receivedMessage.getContent().toString()); } }