LoginSignup
5
5

More than 3 years have passed since last update.

SpringBootでメール送信(添付ファイルあり/なし)

Posted at

環境

  • java 1.8
  • spring boot 2.3.0
  • spring-boot-starter-mail-2.3.0

Maven依存関係

Mavenに必要な依存関係として以下を追加します。

pom.xml
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

SMTPサーバ接続情報

メール送信先となるSMTPサーバの情報をapplication.propertiesに追加します。
以下は参考ですので、ご自身の使用するサーバの情報に合わせて指定してください。
※gmailで使用する場合にはgoogleの二段階認証があるためひと癖あるようです。

application.properties
#ホストアドレス
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サーバにリクエストできた!」という事なのかなぁと。

メールサーバーが送信元に送信失敗の通知メールを返すので、それで判断するしかなさそうでした。


  1. org.springframework.mail.SimpleMailMessage 

  2. org.springframework.mail.MailSender 

  3. javax.mail.internet.MimeMessage; 

  4. org.springframework.mail.javamail.JavaMailSender 

5
5
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
5