この記事は公開されてから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を使用したメール送信ではファイル添付はできなさそうですが、メッセージを送るだけなら事足りるのではないでしょうか。 今度はファイル添付の方法も調べて書きたいと思います。