はじめに
この記事は、RailsチュートリアルなどでHerokuのアドオンとして利用されることがある「SendGrid」において、
メールが届かないというトラブルになった際の対応を記述したログです。
前提
- HeokuにRailsアプリをデプロイしており、かつメーラー機能の実装が完了していること。
結論
- Heokuにログインし、デプロイしたアプリのOverViewkら、SendGridへのリンクをクリック
- ページ遷移後、SendGridのページにあるサイドバーから、Activityを選択。
- そこがメールが送信されているかのログが確認できるので、内容をチェック
- もし、
Your account has been suspended. Please contact Support to regain access.
というエラーメッセージが出ていたら、アカウントが凍結しているので、サポートに連絡すること。
背景
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
ボタンを押下
先程入力した問い合わせ内容が入力フォームに反映されているので、必要事項を入力して、送信。
英語は下記のような感じで入力しました。
My account was suspended. Please regain access. Id: メールアドレス
しばらくすると(大体問い合わせてから5時間くらい?)、以下のようなメールがサポートより届きます。
再度アクセスすると、アカウント凍結が解除され、無事に送信できるようになるのがわかります。
まとめ
なにかトラブルが起きたときは、一つずつ検証しながら、解決していくことが大事ですね。
なにはともあれ、ログをちゃんと確認するのは大事ということです。