Heroku に公開してるサービスにメール送信機能を実装したい。
前回、ローカルで動作確認に成功済
とりま、ローカルで実装しよう。。。
ということで、 Spring Mail と、 FakeSMTP を使って前回ローカル環境で動作させることができました。
↓前回の記事
Heroku で動作させたいけど…どうすれば…?
で、もともと Heroku に公開してるサービスなので、 Heroku でどのように動作させよう??
「Heroku gmail送信」とかで調べると、 SendGrid とか、アドオン使った実装の情報ばかり。。。
一応やってみたけど、アドオンが一瞬で凍結されたり、セキュリティが厳しそう。。。
それに、 SendGrid の API を使うために、専用のメール送信の書き方をしなければならない。
う~ん、前回 JavaMail で書いたソースをそのまま使いたいんだよね。。。
ローカルで Gmail 送信
application.propertiesを以下のように書き換えればローカルでGmail送信できます。
アプリパスワードの部分だけ、Gmail側で設定が必要です。たくさんネットに記事があるのでググれば大丈夫です。
spring.mail.host=smtp.gmail.com
spring.mail.port=587
# 以下2つは、各々の設定に書き換える
spring.mail.username=***hogehoge***@gmail.com
spring.mail.password=******Gmailのアプリパスワード*****
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.ssl.trust=smtp.gmail.com
でも、これを GitHub にコミットできない…
Herokuで使うにはGitHubにコミットしなければなりません。
でも、Gmailのアプリパスワードが書かれた application.properties をコミットするわけにはいかない。。。
(ちなみに、コミットするとGitHubから警告が来ます。ありがたいですね。。。苦笑)
そういえば、前に AWS にデプロイしたときに .properties じゃなくて、.bash_profile にDBとかの設定書いたな…
このサービスを以前AWSにデプロイしたのですが、ローカルでビルドしたJarをサーバーにコピーしたので、DBの接続設定は.bash_profileに書きました。
その経験で、何となくの感覚で、SpringBootがapplication.propertiesだけじゃなくて、OSの環境変数を読み込むことは知っていました。
まてよ、application.propertiesに設定する値をHerokuのサーバーの環境変数に設定すればいいんじゃね?
ビンゴでした。
プロジェクトルートから
heroku config:set 環境変数名=設定値
で設定します。
もしくは、Herokuのダッシュボードからの設定でもOK。
以下のように、「.」を「_」に変えて、大文字にします。
heroku config:set SPRING_MAIL_HOST=smtp.gmail.com
heroku config:set SPRING_MAIL_PORT=587
heroku config:set SPRING_MAIL_USERNAME=***hogehoge***@gmail.com
heroku config:set SPRING_MAIL_PASSWORD=******Gmailのアプリパスワード*****
heroku config:set SPRING_MAIL_PROPERTIES_MAIL_SMTP_AUTH=true
heroku config:set SPRING_MAIL_PROPERTIES_MAIL_SMTP_STARTTLS_ENABLE=true
heroku config:set SPRING_MAIL_PROPERTIES_MAIL_SMTP_SSL_TRUST=smtp.gmail.com
SpringBootが環境設定を読み込むルール
SpringBootが環境設定を読み込むルールがあるようです。
参考:
まとめ
application.propertiesに書く内容をHerokuの環境変数に設定すればOK!
これを、、、
spring.mail.host=smtp.gmail.com
spring.mail.port=587
# 以下2つは、各々の設定に書き換える
spring.mail.username=***hogehoge***@gmail.com
spring.mail.password=******Gmailのアプリパスワード*****
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.ssl.trust=smtp.gmail.com
こうする!
heroku config:set SPRING_MAIL_HOST=smtp.gmail.com
heroku config:set SPRING_MAIL_PORT=587
heroku config:set SPRING_MAIL_USERNAME=***hogehoge***@gmail.com
heroku config:set SPRING_MAIL_PASSWORD=******Gmailのアプリパスワード*****
heroku config:set SPRING_MAIL_PROPERTIES_MAIL_SMTP_AUTH=true
heroku config:set SPRING_MAIL_PROPERTIES_MAIL_SMTP_STARTTLS_ENABLE=true
heroku config:set SPRING_MAIL_PROPERTIES_MAIL_SMTP_SSL_TRUST=smtp.gmail.com
感想
環境変数って何だろう?「パスが通っている」とはどういうこと?
application.properties に設定する値ってどういう意味があるんだろう?
今回の経験で、さらに知識を深めたくなりました。
いつかまとめたいと思います。