Rails と Heroku を利用して Webサイトを運用していましたが SendGrid でセキュリティの観点から user_name と Password を利用した認証ではメールを送信することが不可になったようです。そこで、メールを送信できるように
- SendGrid の2段階認証を有効化
- API key を利用してSendGrid にアクセス
上記、設定にしなおしました。
手順
- Heroku のダッシュボードから SendGrid にアクセスする。
- SendGrid の設定画面から2段階認証を有効する。
- SendGrid の設定画面から API key を作成し保存する。
- Rails
config/environments/production.rb
で ActionMailer の設定を編集する。 - Heroku の環境変数に取得した API key を追加する。
-
git push heroku master
する。
環境
- Rails
- Heroku
- SendGrid(※ Heroku の add-ons)
※インストール済みの前提でいきます。
1. Heroku のダッシュボードから SendGrid にアクセスする。
Heroku の Web サイトの Overview メニュー内の Installed add-ons から Twillo SendGrid をクリックし SendGrid の Web サイトへアクセスします。
初めて Web サイトを訪問した場合、アカウントを有効化するために任意のメールアドレスに有効化リンクを送信することになると思います。そちらは対応してアカウントを有効にしてください。
2. SendGrid の設定画面から2段階認証にする。
① SendGrid へのアクセスを2段階認証にします。メニューより「Two-Factor」をクリックします。
② 遷移したページの画面右上の「Add Two-Factor Authentication」ボタンをクリックします。
③「OK, Got it」ボタンをクリックします。
④ 携帯端末に SMS で確認コードを送信してもらいます。
⑤「Country Code」は、Japan(+81)を選択、「Mobile Phone Number」に利用している携帯番号の頭の0を除いた番号を入力し「Next」ボタンをクリックします。
⑥ SendGrid より携帯端末に届いた確認コードを入力し「Save」ボタンをクリックします。
⑦ 2段階認証が有効になりました。
SendGrid の設定画面から API key を作成し保存する。
① 2段階認証が有効になった後、API key を作成します。メニューより「API Keys」をクリックします。
② 繊維したページ右上の「Create APK Key」をクリックします。
③ 「API Key Name」にAPI key の名前を入力します、任意の名前で大丈夫です。「API Key Permissions」は「Full Access」を選択し「Create & View」をクリックします。
④ 作成したAPI key が表示されるので「Copied!」をクリックしメモ帳などに控えておきます。この値は、後で Heroku の環境変数に追加します。 控え終わったら「Done」をクリックします。
※こちらの画面を閉じるとAPI key の値は確認できなくなります。Heroku の環境変数に追加する前になくしてしまった場合は、新しくAPI key を作り直す必要があります。
⑤ SendGrid の API key が作成できました。SendGrid の Webサイトでの設定は以上になります。
4. Rails config/environments/production.rb
で ActionMailer の設定を編集する。
SendGrid で「2段階認証の有効化」と「API Key」の作成ができたので Rails の ActionMailerを SendGrid にアクセスして発行できるようにconfig/environments/production.rb
の設定を下記のように編集します。
config.action_mailer.perform_caching = false
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
host = '********'
config.action_mailer.default_url_options = { host: host }
ActionMailer::Base.smtp_settings = {
address: 'smtp.sendgrid.net',
user_name: 'apikey',
password: ENV['SENDGRID_API_KEY'],
authentication: :plain,
domain: 'herokuapp.com',
port: '587',
enable_starttls_auto: true,
}
※ host の「********」は自身の Rails アプリケーションのルート URL にしてください。
SendGrid に API key でアクセスする場合、user_name は、必ず'apikey' になります。
password に先程、作成した API key を渡します。Heroku の環境変数に API key を追加して読み込むようにするのでENV['SENDGRID_API_KEY']と入力しています。
参考:Integrating with the SMTP API - ドキュメント | SendGrid
5. Heroku の環境変数に取得した API key を追加する。
ターミナルで以下のコマンドを入力して Heroku の環境変数に SendGrid の API key を追加します。
※ ************************************* には SendGrid API key を作成した際に控えていた値を入力してください。
$ heroku run config:set SENDGRID_API_KEY=*************************************
Heroku の環境変数の確認をしたい場合は、以下のコマンドで確認できます。
$ heroku run config
Heroku への環境変数の追加は、Heroku の Web サイトからも追加できます。Settings ページの「Config Vars」から設定してください。
6. git push heroku master
する。
最後に下記コマンドで本番環境に反映させます。以上で SendGrid に API key でアクセスし SMTP 方式でメールを送信できるようになります。
$ git push heroku master