5
2

More than 1 year has passed since last update.

Java(spring)のメール送信について (2パターン実装してみた)

Last updated at Posted at 2023-02-02

実務の中で初めて触れた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ファイルの生成処理の実装ができたら、それをメールに添付して送信するみたいな実装をこれからやっていこうと思います。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2