Edited at

[Rails]HerokuのアドオンSendGridでメールが届かないときの対処法


はじめに

この記事は、RailsチュートリアルなどでHerokuのアドオンとして利用されることがある「SendGrid」において、

メールが届かないというトラブルになった際の対応を記述したログです。


前提


  • HeokuにRailsアプリをデプロイしており、かつメーラー機能の実装が完了していること。


結論


  • Heokuにログインし、デプロイしたアプリのOverViewkら、SendGridへのリンクをクリック
    heroku-overview-page.png

  • 自身のメールアドレスを入力する
    sendgrid.png

  • メールアドレス宛にアカウント有効化用リンクが添付されたメールが届くので、それをクリック

    sendgrid-account-activate-mail.png


  • ページ遷移後、SendGridのページにあるサイドバーから、Activityを選択。

    sendgrid-sidebar.png


  • そこがメールが送信されているかのログが確認できるので、内容をチェック

    sendgrid-activity-log.png


  • もし、Your account has been suspended. Please contact Support to regain access.というエラーメッセージが出ていたら、アカウントが凍結しているので、サポートに連絡すること。

    sendgrid-suspended-error.png



背景

Railsチュートリアルの学習サポートを行っていた際、教えていた方から

「SendGridからメールが届かないのですが。。。」

という相談を受けました。

コードなどを確認しましたが、そこでは特に問題がなさそうだったものの、一つずつ検証していくことにしたのです。


試したこと1:コンソールで実行できるか確かめてみる

まずは、herokuコマンドを使って、rails consoleでメールを送信する処理に問題がないか、動作確認してみます。

$ heroku run rails console

ActionMailer::Base.mail(from: "sample@sample.com", to: "有効なメールアドレス", subject: "題名", body: "本文").deliver_now

すると、コードに問題がなければ、次のようなオブジェクトが戻り値となるはずです。

ActionMailer::Base#mail: processed outbound mail in 0.7ms

Sent mail to sampleto@sample.com (1.1ms)
Date: Sun, 03 Feb 2019 16:51:53 +0900
From: sample@sample.com
To: sampleto@sample.com
Message-ID: <5c569d99a0680_d0623febc643c03c95561@YutanoMBookpuro.mail>
Subject: =?UTF-8?Q?=E9=A1=8C=E5=90=8D?=
Mime-Version: 1.0
Content-Type: text/plain;
charset=UTF-8
Content-Transfer-Encoding: base64

5pys5paH

=> #<Mail::Message:70281877585520, Multipart: false, Headers: <Date: Sun, 03 Feb 2019 16:51:53 +0900>, <From: sample@sample.com>, <To: sampleto@sample.com>, <Message-ID: <5c569d99a0680_d0623febc643c03c95561@YutanoMBookpuro.mail>>, <Subject: 題名>, <Mime-Version: 1.0>, <Content-Type: text/plain>, <Content-Transfer-Encoding: base64>>

動作に問題がないことがわかったので、別のところに問題がありそうです。


試したこと2: SendGridのAPIキーを作成してみる

こちらの記事を参考に、APIキーを設定してみることにしました。

※Railsチュートリアルの11章まで進められている方は、SendGridのAPIキーを作成するから進めるとスムーズかと思います。

上記サイトでAPIが作成できたら、一度現在のherokuの環境変数を確認してみましょう。

$ heroku config

その中に、

SENDGRID_API_KEY

SENDGRID_USERNAME

SENDGRID_PASSWORD

上記それぞれの環境変数が設定されていれば、問題なく登録されていることがわかりました。


試したこと3: SendGridのActivityログを確認してみる

設定やコードに問題なさそうなことがわかったので、SendGridにどういうログ(emailActivity)が吐かれているか確認することにしました。

(本当は、ここから最初に確認するべきでしたが、、、)

結論に記載した手順に従ってログを確認したところ、

Your account has been suspended. Please contact Support to regain access.

意訳:あなたのアカウントは停止されているので、サポートに連絡してね

なぜ凍結されたのかは、よくわからないのですが

=> 新しいアカウントでアクセスした際、sendgrid側で設定しているフィルタリングに引っかかって、それがご検知されると凍結されるようですね。

公式サイトによると、どうやらセキュリティ的に危険な対応をしていると、それを察知して凍結処理するみたいですね。

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

こうなってしまっては、もうお手上げなので、エラーメッセージ横にある、contact suportをクリック。

次に、遷移先画面下部にある、contact suportをクリック。

問い合わせたい内容を英語で入力し、continueをクリック。

そのまま画面をスクロールして、Open a suppor requestボタンを押下

先程入力した問い合わせ内容が入力フォームに反映されているので、必要事項を入力して、送信。

Window_と_Search_For_Solutions__Get_Support_.png

英語は下記のような感じで入力しました。

My account was suspended. Please regain access. Id: メールアドレス

しばらくすると(大体問い合わせてから5時間くらい?)、以下のようなメールがサポートより届きます。

sendgrid-reply.png

再度アクセスすると、アカウント凍結が解除され、無事に送信できるようになるのがわかります。


まとめ

なにかトラブルが起きたときは、一つずつ検証しながら、解決していくことが大事ですね。

なにはともあれ、ログをちゃんと確認するのは大事ということです。