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

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

More than 1 year has passed since last update.

はじめに

この記事は、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

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

まとめ

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

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

yuta-ushijima
自己破産というドン底から28歳で未経験からプログラミングを学び、2018年4月からウェブ系のフリーエンジニアとしてキャリアスタート。 ITスキルと情報発信で、自由な生活をおくる生き方を実践中。 公式ブログはこちら→ https://yuta-u.com
https://yuta-u.com
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
ユーザーは見つかりませんでした