#環境
- java 1.8
- spring boot 2.3.0
- spring-boot-starter-mail-2.3.0
#Maven依存関係
Mavenに必要な依存関係として以下を追加します。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
#SMTPサーバ接続情報
メール送信先となるSMTPサーバの情報をapplication.propertiesに追加します。
以下は参考ですので、ご自身の使用するサーバの情報に合わせて指定してください。
※gmailで使用する場合にはgoogleの二段階認証があるためひと癖あるようです。
#ホストアドレス
spring.mail.host=smtp.test.co.jp
#ポート番号
spring.mail.port=587
#ユーザID
spring.mail.username=user
#パスワード
spring.mail.password=password
#認証有無
spring.mail.properties.mail.smtp.auth=true
#TLS保護された接続
spring.mail.properties.mail.smtp.starttls.enable=true
#メールを送るためのクラス
メールに添付ファイルを付けるかでどちらかを選択します。
目的 | メッセージクラス | 送信クラス |
---|---|---|
単純なテキストメール | SimpleMailMessage1 | MailSender2 |
添付ファイル付きメール | MimeMessage3 | JavaMailSender4 |
メッセージクラスに宛先や表題、本文、添付ファイルなどのメッセージ情報をセットし、
送信クラスのsendメソッドで送信をリクエストします。
##単純なテキストメール
SimpleMailMessageにメッセージ情報をセットし、MailSenderで送信します。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.stereotype.Service;
@Service
public class MailService {
/** メール送信クラス */
@Autowired
MailSender mailSender;
/**
* メール送信
*
* @throws MailException
*/
public void sendMail() throws MailException {
// メッセージクラス生成
SimpleMailMessage simpleMsg = new SimpleMailMessage();
// 送信元アドレスをセット
simpleMsg.setFrom("from@test.co.jp");
// 送信先アドレスをセット
simpleMsg.setTo("to@test.co.jp");
// 表題をセット
simpleMsg.setSubject("メールタイトル");
// 本文をセット
simpleMsg.setText("メール本文");
// メール送信
mailSender.send(simpleMsg);
}
}
##添付ファイル付きメール
MimeMessageにメッセージ情報をセットし、JavaMailSenderで送信します。
これによりメールはテキストではなくHTMLメールとして扱われます。
import javax.mail.internet.MimeMessage;
import javax.mail.MessagingException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
@Service
public class MailService {
/** メール送信クラス */
@Autowired
JavaMailSender mailSender;
/**
* メール送信
*
* @throws MessagingException
*/
public void sendMail() throws MessagingException {
// メールに添付する「C:\text.txt」にあるファイルのオブジェクトを生成
String fileName = "text.txt";
FileSystemResource fileResource = new FileSystemResource("C:\\" + fileName);
// メッセージクラス生成
MimeMessage mimeMsg = mailSender.createMimeMessage();
// メッセージ情報をセットするためのヘルパークラスを生成(添付ファイル使用時の第2引数はtrue)
MimeMessageHelper helper = new MimeMessageHelper(mimeMsg, true);
// 送信元アドレスをセット
helper.setFrom("from@test.co.jp");
// 送信先アドレスをセット
helper.setTo("to@test.co.jp");
// 表題をセット
helper.setSubject("メールタイトル");
// 本文をセット
helper.setText("メール本文");
// 添付ファイルをセット
helper.addAttachment(fileName, fileResource);
// メール送信
mailSender.send(mimeMsg);
}
}
#おまけ:送信失敗のハンドリング
それぞれのsendメソッドは例外を返し得る仕様ですが、宛先アドレスの間違いの場合は正常扱いで例外となりません。
送信リクエストとしては「SMTPサーバにリクエストできた!」という事なのかなぁと。
メールサーバーが送信元に送信失敗の通知メールを返すので、それで判断するしかなさそうでした。