実務の中で初めて触れたjavaのメール送信について、簡単に備忘録として書き残しておこうと思います。
メール送信に困っている方の参考にもなれば嬉しいです。
利用するメールサーバー等の設定
今回は、springを利用しているので、ymlファイルを利用しています。
また、Gmailのサーバーを利用してGmailからメール送信します。
※ springを利用していない方はpropertyファイルに記載が必要になります。
spring:
mail:
host: smtp.gmail.com
port: 587
username: ユーザー名
password: パスワード
properties:
mail:
smtp:
auth: true
starttls.enable: true
password:
gmailにログインする時のパスワードではないので、注意が必要。
auth:
送信依頼をしてきたメールサーバが正規のクライアントかどうかを認証して確認してくれる設定。
starttls.enable:
TLS通信で安全な接続を行ってくれる設定。
上記の設定が終われば、いよいよメール送信です。
メール送信①:SimpleMailMessageを利用
簡単なメール送信(添付ファイルや特殊な文字エンコーディング以外)で利用できます。
実装は本当にシンプルで、タイトルや本文を設定して、MailSenderクラスのsendメソッドで送信するだけです。
import lombok.RequiredArgsConstructor;
import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
public class MailSenderService {
private final MailSender mailSender;
public void sendMail() {
var mailInfo = new SimpleMailMessage();
mailInfo.setSubject("javaの実装練習です");
mailInfo.setText("お元気ですかテストです");
mailInfo.setTo("xxxx@xxxx");
mailInfo.setFrom("xxxx@gmail.com");
mailSender.send(mailInfo);
}
}
メール送信②:JavaMailを利用
MimeMessageHelperを利用してMimeMessageを作成
MimeMessageHelperを利用せず、MimeMessageだけで作成も可能
→ SimpleMailMessageを超える内容が充実したメール送信がしたい時に利用
package com.example.demo.Service;
import lombok.RequiredArgsConstructor;
import org.springframework.mail.MailException;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
public class MailSenderService {
private final JavaMailSender javaMailSender;
public void javaMailSender() {
// 新しいメッセージを作成
var message = javaMailSender.createMimeMessage();
try {
var messageHelper = new MimeMessageHelper(message, true);
messageHelper.setFrom("xxxx@gmail.com");
messageHelper.setTo("xxxx@xxxx");
messageHelper.setText("お元気ですかテストです。JavaMail利用です",
"<span style='color: red'>赤文字出力</span><br>段落下げた");
messageHelper.setSubject("タイトルですよ");
javaMailSender.send(message);
} catch(MessagingException e) {
throw new RuntimeException("メッセージの設定に失敗しました", e);
}
}
}
messageHelper.setTextメソッドの第二引数にhtmlを設定できたり、
addAttachmentメソッドでPDFやファイルを設定できたりするので、
SimpleMailMessageよりもできることが増えるイメージです。
new MimeMessageHelper(message, true);
インスタンス化する際の第二引数にtrueを入れないと添付ファイルを設定できないっぽいです。
(マルチパートモードをonにしないといけない)
PDFファイルの生成処理の実装ができたら、それをメールに添付して送信するみたいな実装をこれからやっていこうと思います。