Spring-Boot + Heroku でメール送信
概要
Spring BootとHerokuを使ってメール送信をします。
やり方
HerokuのSendGridというaddonを利用してメールを送信します。
事前準備
- heroku CLIのインストール済
- Spring BootのアプリケーションをHerokuにデプロイする
- Herokuのアカウントにクレジットカードを登録する(ここから登録)(addonが利用できるようになります)
手順
※herokuのアプリケーション名は、gosshys-testproject
にしています。
SendGridのaddonを追加
以下のコマンドでSendGridのaddonを登録します。コマンドは、デプロイ済のSpring Bootのアプリケーションのgitリポジトリで実行してください。
heroku addons:create sendgrid:starter
実行結果
$ heroku addons:create sendgrid:starter
Creating sendgrid:starter on ⬢ gosshys-testproject... free
Created sendgrid-convex-82110 as SENDGRID_PASSWORD, SENDGRID_USERNAME
Use heroku addons:docs sendgrid to view documentation
成功したら以下のコマンドで、SendGridの環境変数がセットされていることを確認します。自動的にSendGridのユーザー(メールアドレス)とパスワードがセットされます。
$ heroku config:get SENDGRID_USERNAME
[email protected]
$ heroku config:get SENDGRID_PASSWORD
xxxpasswdxxx
アカウントのクレジットカード情報を登録していないとが追加できません
Please verify your account to install this add-on plan
のエラーがでています。
$ heroku addons:create sendgrid:starter
Creating sendgrid:starter on ⬢ gosshys-testproject... !
▸ Please verify your account to install this add-on plan (please enter a credit card) For more information, see https://devcenter.heroku.com/categories/billing Verify now at https://heroku.com/verify
SendGridのAPIキーを取得する
SendGridのドキュメントのObtaining an API keyを参考にSendGridのAPIキーを取得します。
Go hereのhere部分をクリックするとSendGridのAPIキーの取得の画面に遷移します。
最初のアクセス時は、ログイン画面がでてきますが、ここに先程heroku config:get
で取得したSendGridのユーザーとパスワードを入力します。
ログインするとこんな画面がでてきます。
画面右上の「Create API Key」ボタンをクリックすると、APIキー生成の画面が現れます。
- 「API Key Name」にAPIキーの説明を入れます。ここは単純にHerokuのアプリケーション名を入れました。
- 「API Key Permissions」は、「Full Access」と「Restricted Access」のどちらかを選択します。「Billing Access」は、主にエンタープライズ向けのようなので選択しません。また「Restricted Access」は細かくメールの機能を制限できますが、今はどの機能を制限すべきか定かでないので「Full Access」を選択します。
「Create & View」ボタンを押してAPIキーを生成します。
APIキー生成
「Create & View」ボタンをクリックすると以下の画面が現れます。セキュリティの観点からこの画面は1度しか表示されないので、赤字の下にでてくる英数字の羅列をコピーしてどこかにメモしておきます。
APIキーをコピーしてメモしたら「Done」ボタンを押します。するとAPIキーの一覧画面に遷移するので、そこで「API Key ID」と*でマスク化された「API KEY」が参照されます。
Herokuの環境変数にSendGridのAPIキーIDとAPIキーを設定する
ドキュメントのSetup API key environment variableの手順に従ってHerokuの環境変数にSendGridのAPIキーIDとAPIキーを設定します。
$ heroku config:set SENDGRID_API_KEY=(SendGridのページでメモしたAPIキー、APIキーIDではないので注意)
Setting SENDGRID_API_KEY and restarting ⬢ gosshys-testproject... done, v7
SENDGRID_API_KEY: (SendGridのページでメモしたAPIキーが表示されます)
Spring Bootのアプリケーションでメールを送る
ドキュメントのjavaを参考に、Spring Bootにメール送信のプログラムを追加します。
pomにSendGridのライブラリを追加
mavenのpom.xmlのdependenciesに以下を追加します。現時点で4.1.2が最新のようなのでそれを追加しました。Gradleの方はドキュメントに例があります。
<dependency>
<groupId>com.sendgrid</groupId>
<artifactId>sendgrid-java</artifactId>
<version>4.1.2</version>
</dependency>
Spring Bootのコントローラーにメール送信機能を追加
Spring BootのRestControllerにドキュメント内のサンプルをベタ貼りします。Kotlinで書いていてしまっていますが、Javaで大丈夫です。
package com.koiwaimilk.tsukigaoka.core.controller
import com.sendgrid.*
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RequestParam
import org.springframework.web.bind.annotation.RestController
import java.io.IOException
@RestController
@RequestMapping(value = "/mail")
class MailSendController {
@RequestMapping(value = "/send")
fun send(@RequestParam(value = "contents", defaultValue = "Hello, Email!") contents: String): String {
val from = Email("[email protected]")
val subject = "Hello World from the SendGrid Java Library!"
val to = Email("(ここに送信先のメールアドレスを設定します)")
val content = Content("text/plain", "Hello, Email!")
val mail = Mail(from, subject, to, content)
val sg = SendGrid(System.getenv("SENDGRID_API_KEY"))
val request = Request()
try {
request.method = Method.POST
request.endpoint = "mail/send"
request.body = mail.build()
val response = sg.api(request)
System.out.println(response.statusCode)
System.out.println(response.body)
System.out.println(response.headers)
} catch (ex: IOException) {
throw ex
}
return "OK"
}
}
ローカル環境の環境変数の設定
ローカルで動作させる場合は、SENDGRID_API_KEYの設定が必要になるのでIDEのアプリケーション起動時の環境変数にSENDGRID_API_KEYを設定します。例はIntelliJです。
「メニュー」ー「Run」ー「Edit Configurations」
「Enviroment variables」の「...」マークをクリック
「+」ボタンをクリックして、SendGridの環境変数のキー「SENDGRID_API_KEY」とAPIキー(APIキーIDではない)を入力して「OK」ボタンをクリック
「Enviroment variables」に入力したAPIキーが設定されていることを確認して、「OK」ボタンをクリックして設定を完了します。
Spring Bootの起動とメール送信
Spring Bootを起動します。
curlを利用して、メール送信コントローラーをコールします。
$ curl localhost:8080/mail/send
数分後
メールボックを確認するとメールが届いています。
Author And Source
この問題について(Spring-Boot + Heroku でメール送信), 我々は、より多くの情報をここで見つけました https://qiita.com/gosshys/items/a74647d2083c8afef7df著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .