Help us understand the problem. What is going on with this article?

Railsチュートリアル11章 SendGrid 凍結問題を解決する

Railsチュートリアル11章では、本番環境でメール送信する際に、SendGrid を Heroku にアドオンする必要があるのですが、SendGrid アカウントが凍結される方が多くみられたため、解決方法をまとめてみました。

準備: SendGrid アカウントが凍結されているかを確認する

本番環境でメール送信をした後、このような画面が出る。

heroku logs --tail でログを確認。メールの文面ログの後に、以下のようなログが含まれていると凍結されている。

Net::SMTPAuthenticationError (535 Authentication failed: account disabled

メール文面のログがない場合は、もう一度コードの見直しをした方が良さそうです💦

対処方法

米国のSendGridに英語で問い合わせると使える状態にしてくれる、といった情報が多いようですが、自力ですぐに解決できます。

1. 現在の Heroku アプリを削除する

Heroku の setting の一番下から削除します。

2. 新しく Heroku アプリを作る

https://dashboard.heroku.com/apps から Create new app します。名前は変更した方が確実かと思います。

3. production 環境の SMTP 設定に URL を追加しgit push する

Railsチュートリアル11.4 の「Railsのproduction環境でSendGridを使う設定」の host = '<your heroku app>.herokuapp.com'部分に新しいHerokuのURLを記入し、git push しておく。

config/environments/production.rb
Rails.application.configure do
  .
  .
  .
  config.action_mailer.raise_delivery_errors = true
  config.action_mailer.delivery_method = :smtp
  host = '<your heroku app>.herokuapp.com'
  config.action_mailer.default_url_options = { host: host }
  ActionMailer::Base.smtp_settings = {
    :address        => 'smtp.sendgrid.net',
    :port           => '587',
    :authentication => :plain,
    :user_name      => ENV['SENDGRID_USERNAME'],
    :password       => ENV['SENDGRID_PASSWORD'],
    :domain         => 'heroku.com',
    :enable_starttls_auto => true
  }
  .
  .
  .
end

4. remote 先に新しい Heroku git URL を 設定する

URL は、Heroku の Settings ページで確認できます。

$ heroku git:remote -a https://git.heroku.com/〇〇.git

# 正しく設定されたか確認
$ git remote -v

5. Heroku に push する

$ git push heroku
$ heroku run rails db:migrate

6. 最後に SendGrid アドオンする

$ heroku addons:create sendgrid:starter

# Herokuの環境変数を表示したい場合
$ heroku config:get SENDGRID_USERNAME
$ heroku config:get SENDGRID_PASSWORD

以上で完了です。新しく作った本番環境で、メール送信できるか試してみてください 💌

追記: 一度使えるようになっても、しばらく経つとまた凍結していることがあります。SendGridのセキュリティ上の事情なのかもしれませんが、また同じ手順でAppを作り直すのが早そうです😥

参考: SendGrid - アカウント凍結のフローとその解除方法について教えてください。

アカウントが凍結される可能性が高いケースとして、次のようなものがあります。

  • SendGridの認証情報(パスワードやAPIキーなど)がパブリックな場所に置かれていることが発覚した等、セキュリティリスクを理由としたケース
  • 存在しない宛先への送信(Bounce)や誤った宛先への送信(Invalid)等、レピュテーションが下がることを理由としたケース
  • 急激な送信量の増加を検知した等、アカウントの不正利用が疑われるケース アカウントの停止は、このような重大な事態を防ぐための措置でもあるということをご理解ください。
yuppymam
yasslab
RailsチュートリアルとRailsガイドを開発しています。解説動画や電子書籍、法人向け研修・協業プラン、全文検索・バージョン切替機能などを提供しています。
https://yasslab.jp/ja
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした