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

## はじめに

この記事は、RailsチュートリアルなどでHerokuのアドオンとして利用されることがある「SendGrid」において、
メールが届かないというトラブルになった際の対応を記述したログです。

## 前提

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

## 結論
* Heokuにログインし、デプロイしたアプリのOverViewｋら、SendGridへのリンクをクリック
<img width="1291" alt="heroku-overview-page.png" src="https://qiita-image-store.s3.amazonaws.com/0/195539/f5b2f518-6f5f-7b28-eb89-831eac63d7ae.png">
* 自身のメールアドレスを入力する
<img width="1287" alt="sendgrid.png" src="https://qiita-image-store.s3.amazonaws.com/0/195539/c3b52311-a551-b5e4-63b2-8bd274ef5e80.png">
* メールアドレス宛にアカウント有効化用リンクが添付されたメールが届くので、それをクリック
<img width="641" alt="sendgrid-account-activate-mail.png" src="https://qiita-image-store.s3.amazonaws.com/0/195539/bdc3cb70-af44-bf7b-349b-086f9722cadc.png">

* ページ遷移後、SendGridのページにあるサイドバーから、Activityを選択。
<img width="1292" alt="sendgrid-sidebar.png" src="https://qiita-image-store.s3.amazonaws.com/0/195539/cad59d20-8e8b-1c11-1098-fb77e5f9d7b3.png">

* そこがメールが送信されているかのログが確認できるので、内容をチェック
<img width="1293" alt="sendgrid-activity-log.png" src="https://qiita-image-store.s3.amazonaws.com/0/195539/26def214-baed-422b-94d5-29f7142f201a.png">

* もし、`Your account has been suspended. Please contact Support to regain access.`というエラーメッセージが出ていたら、アカウントが凍結しているので、サポートに連絡すること。
<img width="1292" alt="sendgrid-suspended-error.png" src="https://qiita-image-store.s3.amazonaws.com/0/195539/8765ad1d-4d1c-344d-7208-aa37c4d1e530.png">

## 背景

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

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

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

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

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

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

```bash
$ 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キーを作成してみる

[こちら](https://rails-ambassador.herokuapp.com/tips/HerokuSendmailAddon)の記事を参考に、APIキーを設定してみることにしました。

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

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

```bash
$ 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側で設定しているフィルタリングに引っかかって、それがご検知されると凍結されるようですね。

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

[アカウント凍結のフローとその解除方法について教えてください。](https://support.sendgrid.kke.co.jp/hc/ja/articles/203392245-%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E5%87%8D%E7%B5%90%E3%81%AE%E3%83%95%E3%83%AD%E3%83%BC%E3%81%A8%E3%81%9D%E3%81%AE%E8%A7%A3%E9%99%A4%E6%96%B9%E6%B3%95%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E6%95%99%E3%81%88%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84-)

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

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

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

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

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

<img width="765" alt="Window_と_Search_For_Solutions__Get_Support_.png" src="https://qiita-image-store.s3.amazonaws.com/0/195539/58b11f5b-6e14-56fb-576a-f4600a9e0340.png">

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

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

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

![sendgrid-reply.png](https://qiita-image-store.s3.amazonaws.com/0/195539/a73a8a69-212b-ad67-cc80-ff54bb36982a.png)


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


## まとめ

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

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