ksino's diary

覚えたことを忘れないように、小さなことでも書いていく。

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());

  }

}