5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Posted at

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 サイトへアクセスします。
blog_0_qiita.png
初めて Web サイトを訪問した場合、アカウントを有効化するために任意のメールアドレスに有効化リンクを送信することになると思います。そちらは対応してアカウントを有効にしてください。

2. SendGrid の設定画面から2段階認証にする。

① SendGrid へのアクセスを2段階認証にします。メニューより「Two-Factor」をクリックします。
blog_1_qiita.png
② 遷移したページの画面右上の「Add Two-Factor Authentication」ボタンをクリックします。
blog_2_qiita.png
③「OK, Got it」ボタンをクリックします。
blog_3_qiita.png
④ 携帯端末に SMS で確認コードを送信してもらいます。
blog_4_qiita.png
⑤「Country Code」は、Japan(+81)を選択、「Mobile Phone Number」に利用している携帯番号の頭の0を除いた番号を入力し「Next」ボタンをクリックします。
blog_5_qiita.png
⑥ SendGrid より携帯端末に届いた確認コードを入力し「Save」ボタンをクリックします。
blog_6_qiita.png
⑦ 2段階認証が有効になりました。
blog_7_qiita.png

SendGrid の設定画面から API key を作成し保存する。

① 2段階認証が有効になった後、API key を作成します。メニューより「API Keys」をクリックします。
blog_8_qiita.png
② 繊維したページ右上の「Create APK Key」をクリックします。
blog_9_qiita.png
③ 「API Key Name」にAPI key の名前を入力します、任意の名前で大丈夫です。「API Key Permissions」は「Full Access」を選択し「Create & View」をクリックします。
blog_10_qiita.png
④ 作成したAPI key が表示されるので「Copied!」をクリックしメモ帳などに控えておきます。この値は、後で Heroku の環境変数に追加します。 控え終わったら「Done」をクリックします。
※こちらの画面を閉じるとAPI key の値は確認できなくなります。Heroku の環境変数に追加する前になくしてしまった場合は、新しくAPI key を作り直す必要があります。
blog_11_qiita.png
⑤ SendGrid の API key が作成できました。SendGrid の Webサイトでの設定は以上になります。
blog_12_qiita.png

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」から設定してください。
blog_13_qiita.png

6. git push heroku masterする。

最後に下記コマンドで本番環境に反映させます。以上で SendGrid に API key でアクセスし SMTP 方式でメールを送信できるようになります。

$ git push heroku master
5
4
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
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?