おしりんブログ

新人PGおしりんの色々まとめるよブログ

Springbootでメール送信

こんにちはおしりんです。
花粉症と風邪を併発して死にかけてます。

最近Springbootでメールを送信する機会がありました。
あとから使えるかもなのでめもっときます。

ライブラリ

org.springframework.boot:spring-boot-starter-mail:1.5.9.RELEASE

configファイルのbean設定

SMTPサーバの設定を記述

認証なしサーバの場合

<bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
    <property name="host" value="localhost" />
    <property name="port" value="25" />
</bean>

認証ありサーバの場合(ex:Gmail

<bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
    <property name="host" value="smtp.gmail.com" />
    <property name="port" value="587" />
    <property name="username" value="" />
    <property name="password" value="" />
    <property name="javaMailProperties">
        <props>
            <prop key="mail.transport.protocol">smtp</prop>
            <prop key="mail.smtp.auth">true</prop>
            <prop key="mail.smtp.starttls.enable">true</prop>
        </props>
    </property>
</bean>

組織アカウントのメールアドレスを使用する場合はusernameに送信元となるメールアドレスと、passwordにメールアドレスに紐づくパスワードをそれぞれ設定。
また、Googleのアカウント情報から「安全性の低いアプリの許可」を有効にする必要がある。

個人アカウントを使用する場合はusernameに送信元となるメールアドレスと、passwordにはアプリパスワードを設定する。
アプリパスワードについては、以下のサイトが分かりやすかったどす。

https://www.ajaxtower.jp/googleaccount/2step-verify/index6.html

実装

@Autowired
JavaMailSender javaMailSender;

public String sendErrorEmail() {
    SimpleMailMessage email = new SimpleMailMessage();
    email.setTo("to@example.com");
    email.setCc("cc@example.com");
    email.setSubject("件名");
    email.setText("本文");

    javaMailSender.send(email);

    return "result";
}

簡易的なメールを送信する場合はSpringが提供しているSimpleMailMessageクラスを使用する。
そうでない場合(添付ファイルを送りたい、HTML形式にしたい)は、MimeMessageクラスを使用する。

To、Cc、Bccは複数設定可能。その場合は配列で定義する。
Fromは設定してもしなくてもおk。

動作確認

テストはRadishで行いました。
色々試したけどこれがいちばんらくちんでした。

http://radish.jp.brothersoft.com/download/

Radishの使い方は以下のサイトが分かりやすかったどす。

http://lilium.7thheavenblue.com/web_environment/radish/

ありがとうございました。

いじょう!