LoginSignup
0
0

More than 1 year has passed since last update.

SpringBootでHerokuからアドオン使わずにGmail送信する

Last updated at Posted at 2022-05-15

Heroku に公開してるサービスにメール送信機能を実装したい。

前回、ローカルで動作確認に成功済

とりま、ローカルで実装しよう。。。
ということで、 Spring Mail と、 FakeSMTP を使って前回ローカル環境で動作させることができました。
↓前回の記事

Heroku で動作させたいけど…どうすれば…?

で、もともと Heroku に公開してるサービスなので、 Heroku でどのように動作させよう??

「Heroku gmail送信」とかで調べると、 SendGrid とか、アドオン使った実装の情報ばかり。。。
一応やってみたけど、アドオンが一瞬で凍結されたり、セキュリティが厳しそう。。。
それに、 SendGrid の API を使うために、専用のメール送信の書き方をしなければならない。

う~ん、前回 JavaMail で書いたソースをそのまま使いたいんだよね。。。

ローカルで Gmail 送信

application.propertiesを以下のように書き換えればローカルでGmail送信できます。
アプリパスワードの部分だけ、Gmail側で設定が必要です。たくさんネットに記事があるのでググれば大丈夫です。

application.properties
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!

これを、、、

application.properties
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 に設定する値ってどういう意味があるんだろう?
今回の経験で、さらに知識を深めたくなりました。
いつかまとめたいと思います。

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