Rails Heroku で運用しているサイトで SendGrid を2段階認証にし API KEY を利用して SMTP 方式で Mail を送信する


Rails と Heroku を利用して Webサイトを運用していましたが SendGrid でセキュリティの観点から user_name と Password を利用した認証ではメールを送信することが不可になったようです。そこで、メールを送信できるように

  • SendGrid の2段階認証を有効化
  • API key を利用してSendGrid にアクセス

上記、設定にしなおしました。

手順

  1. Heroku のダッシュボードから SendGrid にアクセスする。
  2. SendGrid の設定画面から2段階認証を有効する。
  3. SendGrid の設定画面から API key を作成し保存する。
  4. Rails config/environments/production.rbで ActionMailer の設定を編集する。
  5. Heroku の環境変数に取得した API key を追加する。
  6. 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/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