メールが届かないときに原因を切り分ける方法
皆さんは、きちんとメールを送信したはずなのに、「メールが届いていない!」と問い合わせを受けた経験があるでしょうか?ひとくちに「メールが届かない」と言われても、一体何を改善すれば良いかわからないという方も多いかもしれません。
そんな時にも焦らず対処するには、メールの送信から開封までの流れをあらかじめ知っておくことが大切です。メールが受信トレイに届くまでにはいくつかのステップを踏んでおり、それらのステップひとつずつに「メールが届かなかった」可能性が潜んでいます。そして、行うべき対応はステップごとに異なります。本記事では、「メールが届かない」トラブルで最初に確認すべき、問題の切り分け方をご紹介します。
まず、メールが届くまでの流れを下の図で紹介します。
- 送信者が送信元メールサーバ(SendGrid)に送信をリクエストする
- 送信元メールサーバが宛先メールサーバにメールを送信する
- 宛先メールサーバがメールを受信トレイに振り分ける
- 受信者がメールを受信トレイから取り出し、閲覧する
この流れは、郵便に例えるとわかりやすいかもしれません。
- 送り手が最寄りの郵便局(あるいはポスト)に手紙を投函する
- 手紙が送り先の最寄りの郵便局まで運ばれる
- 配達員が送り先の郵便受けに手紙を届ける
- 郵便受けから手紙を取り出し、閲覧する
「メールが届かない」とき、これらのステップのどこまでうまくいっていて、問題がどこで発生しているのかを確かめることが解決の第一歩です。一つずつ確認していきましょう。
1. メールは正しくリクエストできたか?
手紙がきちんとポストに投函されたかどうか、疑う人はいないかもしれません。それは、ポストに投函するのが大概あなた自身だからです。しかし、メールの場合は違います。送信リクエストを送るのはあなたではなくサーバです。送信リクエストが本当にSendGridに受け付けられたのかどうか、サーバのログをチェックしましょう。
SendGridの場合、SMTPかWeb APIのどちらかで送信リクエストを行います。SMTPを使っている場合、電子メールをSendGridのSMTPサーバへ送る一連のメールトランザクションは、正常に「250 OK」で終了しているでしょうか。また、Web APIのMail Send APIを使っている場合、SendGridから2xxのレスポンスが返ってきているでしょうか。そうではない場合、SendGridから返されたエラーコードとメッセージを確認してください。
エラーが返る原因は、間違った認証情報を指定した、ネットワークに問題が起きていた、SendGridのサーバに一時的な障害があったなど様々です。エラーメッセージを参考に、原因を特定しましょう。
また、リクエストがいつ何時も成功するという保証はありません。失敗する可能性もあるという前提でシステムを設計することをお勧めします。
2. メールは宛先サーバに受け取られたか?
送信リクエストがSendGridに受け取られているようなら、次はSendGridのActivityを見ましょう。ここで確認すべきポイントは2つあります。
1. SendGridが宛先サーバにメール送信を試みたかどうか
送信リクエストが受け取られても、送信されたとは限りません。SendGridがメール送信を試みたかどうかは、「Processed」イベントが発生しているかどうかで判別可能です。ProcessedはSendGridがメール送信処理を始めたことを意味しています。一方、送信リクエストを受け取っても、送信を行わずにリクエストを破棄する場合もあります。この時には「Drop」イベントが発生します。Dropが発生するのは、宛先が配信停止(Unsubscribe)リストやBouncesリストに掲載されていた場合などです。Activity画面の右側の i マークからREASON(Dropになった理由)を確認しましょう。
2. 宛先サーバがメールを正常に受理したかどうか
宛先サーバがメールを受け付けると、「Delivered」イベントが発生します。ProcessedはあってDeliveredがない場合、SendGridはメール送信したが、何らかの理由で宛先サーバに受け取られなかったことになります。Deliveredの代わりにBounce、Block、Deferredのいずれかのイベントが発生しているはずなので、確認しましょう。
Activityや各イベントの見方についての詳細は、以下のページを参考にしてください。
- チュートリアル:メールが届いているか確認する
- ブログ記事:メールはなぜ届かなかったのか?ActivityのREASONから原因を特定する方法
- ブログ記事:Delivered, Bounced, Blocked, Deferredイベントのそれぞれの意味合いとは
3. 宛先サーバはメールを受信トレイに振り分けたか?
宛先サーバがメールを受理した(=Deliveredが発生した)としても、何らかの理由により破棄され、受信者が確認できない場合もあります。また、受信トレイに届くのに時間がかかっている可能性もあるかもしれません。メールが受理された後の処理はSendGridでは把握できないので、解決のためには宛先サーバに原因を問い合わせる必要があります。
4. 受信者はメールをきちんと確認したか?
これはよくある話だと思いますが、迷惑メールフォルダに入ってしまったメールに受信者が気付いていないというパターンもあるでしょう。これもSendGrid側ではわからず、受信者に確認してもらうしかありません。
さいごに
サポートでは「メールが届かなかった理由を教えてほしい」というお問い合わせをよくいただきますが、Activityを確認すれば手がかりとなる情報が必ず得られます。どのようなイベントが発生しているのか(あるいは全くイベントが発生していないのか)をまずは確認してみましょう。Activityには参照できるイベント数や表示期間に制限があるので、Event Webhookを用いてイベントデータをご自身のデータベースに蓄積しておくことをおすすめします。
- チュートリアル:Event Webhookでイベントを受信する
この記事のように問題を切り分けてみて、それでもメールが届かない原因が不明な場合は、お気軽に弊社サポートまでお問い合わせください!