SpringBootとGradleのススメ ~ メール送信編

springjava
スポンサーリンク
springbootでメール送信機能について調べたので共有します。
さくっとメールの送信を行います。以下二つの方法について記載します。
  • SMTP-AUTH(port587) gmailを使用した方法(認証有り)
  • SMTP(port25) を使用した方法(認証無し)
以前使用したプロジェクトに追加する形で実装します。SpringBootとGradleのススメ ~ CRUD操作編
スポンサーリンク

SMTP-AUTHを使用したメール送信

gmailを使用してメール送信します。

build.gradleの修正

dependenciesの中にこいつを追加します。

build.gradle

compile('org.springframework.boot:spring-boot-starter-mail')
追加した後に以下の作業をしてください。
プロジェクト右クリック>Gradle>Gradleプロジェクトのリフレッシュ。これは先ほど追加した依存関係をeclipseちゃんがすぐに認識してくれないので認識してもらう為に必要です。

application.propertiesの修正

以下の設定を追記してください。

application.properties

#メール設定
spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=送信者のメールアドレス
spring.mail.password=パスワード
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
googleの二段階認証を使用している人はパスワードの部分をアプリパスワードにしないと送れないので注意が必要です。
私は二段階認証していなかったので普通にgmailアドレスとパスワードでいけました。(自分セキュリティ大丈夫?)二段階認証のアプリパスワードについて詳しくはこちらを参照ください。Google アプリ パスワードでログイン

テンプレの修正

簡単にボタンを押してPOSTでメール送信できるようにします。

index.html(bodyの最下部へ追記)

<!-- メールテスト -->
<form action="/mail/send" method="post" >
<input type="submit" name="mailsend" value="テストメール送信" />
</form>

Controllerの作成

RestControllerとして作成します。ControllerとRestControllerの違いですが、ControllerはWebページ用のコントローラーで主にviewを返す。RestControllerはWebAPI用のコントローラーで主にjsonやxmlを返す。って感じの違いがあります。

MailController.java

package dbtest.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MailController {
    private final JavaMailSender javaMailSender;
    @Autowired
    MailController(JavaMailSender javaMailSender) {
        this.javaMailSender = javaMailSender;
    }
    @RequestMapping(value = "/mail/send", method = {RequestMethod.POST} )
    public String send() {
        SimpleMailMessage mailMessage = new SimpleMailMessage();
        mailMessage.setTo("送信先");
        mailMessage.setReplyTo("返信先");
        mailMessage.setFrom("送信元");
        mailMessage.setSubject("テストメール");
        mailMessage.setText("テストメールです\nほげほげ");
        javaMailSender.send(mailMessage);
        return "メール送信しました";
    }
}
javaMailSenderというjavaMailをラップしたメール送信オブジェクトを使用します。あとはPOSTで受け取ったら各種メール設定をして送信しています。成功すると「メール送信しました」と画面に出ます。

動作確認

さて、試しに動かしてみます。springbootアプリとして実行し、localhost:8080へアクセスします。画面下部にメール送信ボタンが見えますね。

 

ポチッとな

送信されたみたいです。
メールを確認してみます。
届きました!

SMTPを使用したメール送信

認証したくない・・・そもそもgoogleアカウントもってない・・・面倒なことは無しにサクッと動かしたい・・・とりあえずメール送信テストしたいんじゃー!っていう人の為の方法。基本的な設定は同じです。違う部分はapplication.propertiesの設定です。

application.propertiesの修正

以下のようにしてください。

application.properties

#メール設定
spring.mail.host=localhost
spring.mail.port=25
smtp.sender=送信者のメールアドレス
senderの部分は送信元が誰なのかという設定、迷惑メールに振り分けられないように設定しておいた方が幸せ

動作確認

メール送信ポチッとな

!!!

おいおい、エラってるよ・・・どうやらSMTPサーバーが動いていないみたいです。macでは標準でpostfixという便利なものがインストールされているので、これを起動すればSMTPサーバー立てられます。ターミナル開いて以下のコマンドを打ちます。

$ sudo postfix start

再度メール送信!

成功しました。やったねー!

参考サイト

[Java][Spring Boot] メールを送信する。

Spring Bootでメールを送信する

コメント