56
32

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チュートリアル11章 SendGrid 凍結問題を解決する

Last updated at Posted at 2020-04-17

追記: Railsチュートリアルのテキストで使用されていた SendGrid アドオンは、Mailgun に変更となりました。よって、以下の対応をする機会はなくなるかと思います🙏これまで SendGrid アドオンでうまくいかなかった方も、Mailgun バージョンで再チャレンジしてみてくださいね👌✨
参考: Railsチュートリアルヘルプ

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)等、レピュテーションが下がることを理由としたケース
  • 急激な送信量の増加を検知した等、アカウントの不正利用が疑われるケース
    アカウントの停止は、このような重大な事態を防ぐための措置でもあるということをご理解ください。
56
32
3

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
56
32

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?