[Java][Spring Boot] メールを送信する。

2016.08.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

バッチ処理の途中で失敗した場合などに、どこでどんなエラーが発生したのかを知る必要があります。
アプリケーションで取得したExceptionなどをメールで送受信できると便利ですよね、という事でメールを送信する方法を調べたので備忘録として記しておきます。

環境

Mac OSX 10.10.5 Yosemite
Java 1.8.0_91
Spring Boot 1.3.7
PostgreSQL 9.5.1
Eclipse Mars 2

簡単なメールを送信

application.properties

spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=送信者のメールアドレス
spring.mail.password=パスワード
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true

上記はGmailの例をpropertiesに書いていますが、もちろんymlに書いても大丈夫です。

注意点として、2段階認証を設定している場合はパスワードの代わりにアプリパスワードを設定します。
アプリパスワードの取得はこちらを参考にしてください。
Google アプリ パスワードでログイン

実装クラス

package com.send.mail;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.scheduling.annotation.Async;

@SpringBootApplication
public class MailSenderApplication {

	public static void main(String[] args) {
		try (ConfigurableApplicationContext cac = SpringApplication.run(MailSenderApplication.class, args);) {
			cac.getBean(MailSenderApplication.class).execute();
		}
	}
	
	public void execute() {
		try {
			em.createNativeQuery("SELECT * FROM ").getResultList();
		} catch (Exception e) {
			String errorMsg = "エラー発生 : " + e.getMessage();
			send(errorMsg);
		}
	}

	@Autowired
	private MailSender mailSender;
	
	@Async
	public void send(String errorMsg) {
		SimpleMailMessage msg = new SimpleMailMessage();
		msg.setTo("送信先アドレス1");
		msg.setBcc("送信先アドレス2");
		msg.setCc(new String[] {"送信先アドレス3", "送信先アドレス4"});
		msg.setSubject("メールタイトル");
		msg.setText(errorMsg);
		mailSender.send(msg);
	}

}

16行目、自身のBeanを取得してメソッドexecuteを実行。

1〜8行目、execute()
SQL文を間違えて実行を失敗させてExceptionを発生させています。
Exceptionをキャッチしたら、メールで送信したいメッセージを作成して送信メソッドに投げます。

29〜30行目、メールを送信するためのMailSenderを@Autowired。

32〜45行目、send()
送信メソッド。
32行目、@Asyncをアノテートして非同期処理として設定。
34〜39行目、送信内容を設定。
BCCとCCの送信先には、37行目の様に配列でも設定可能。
40行目、MailSenderにセットしてsend()を実行でメール送信。

メールの文章の改行は「\n」でできました。

さいごに

今回紹介したSpringを使用したメール送信ではファイル添付はできなさそうですが、メッセージを送るだけなら事足りるのではないでしょうか。
今度はファイル添付の方法も調べて書きたいと思います。