SpringBootでメール送信テスト

どうも、焼肉ランチの匂いがとれないざわです。

メールの送信テストをとあるプロジェクトで書いた記憶があり、忘れてたので備忘録として残しておこっていう記事です。
記述量少ないです

環境

  • Springboot 1.5.9.RELEASE
  • Java8
  • subethamail 3.1.7(メールテスト用)

設定(3ファイル)

build.gradle

依存関係にsubethamailを追加します

dependencies {
        (省略)
    testCompile('org.springframework.boot:spring-boot-starter-test')
    testCompile group: 'org.subethamail', name: 'subethasmtp', version: '3.1.7'
}

application-test.yml

テスト用のapplication.ymlなどに以下のmail設定を追加します。
usernamepasswordなどのオプションは環境に合わせて

spring:
  mail:
    host: localhost
    port: 9999
    #username: hoge
    #password: hoge
    properties.mail.smtp.auth: false
    properties.mail.smtp.starttls.enable: false

Testクラス例

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
@WebAppConfiguration
@Transactional
public class NoticeServiceTest {

    @Autowired
    MailService service;

    private static Wiser wiser;

    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
        // メールサーバを立てる
        wiser = new Wiser();
        wiser.setPort(9999);
        wiser.setHostname("localhost");
        wiser.start();
    }

    @AfterClass
    public static void tearDownAfterClass() throws Exception {
        // メールサーバを落とす
        wiser.stop();
    }

    @Test
    public void メール通知() throws MessagingException, IOException {
        //準備など〜
        //実行例
        service.sendMail();

        //検証
        List<WiserMessage> messages = wiser.getMessages();

        assertThat(messages.size(), is(1));
        assertThat(messages.get(0).getEnvelopeSender(), is("テスト送信元"));
        assertThat(messages.get(0).getEnvelopeReceiver(), is("テスト送信先"));
        assertThat(messages.get(0).getMimeMessage().getSubject(), is("テストの件名"));

        // 本文取得
        InputStream inputStream = messages.get(0).getMimeMessage().getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("UTF-8")));

        assertThat(reader.readLine(), is("1行目"));
        assertThat(reader.readLine(), is("2行目〜"));
        assertThat(reader.readLine(), is("など");
    }

以上

could not connectなどのエラーがでる場合は、ポートが既に使われていないかなど確認してみるとよいかもです。

サーバサイドエンジニア。オムライスが好物

シェアする

  • このエントリーをはてなブックマークに追加

フォローする