メールアドレス検証の正しい方法と避けるべき方法
- 2024年7月25日
- by SendGrid
- Category: ベストプラクティス 技術ネタ
この記事は How to Verify Email Addresses (the Right Way) の抄訳です。
みなさんは、収集した宛先メールアドレスが正しいかどうかをきちんとチェックしていますか?受信者による迷惑メール報告や到達率の低下といったトラブルを防ぐためには、適切な方法でメールアドレスを検証することが大切です。常に有効なメールアドレスを把握しておくことで、新しくサインアップした顧客とも長年の顧客とも良好なコミュニケーションを取り、エンゲージメントを高めることができます。
Twilio SendGridでは、単純なタイプミスから、他者のリストにわざとスパムトラップを登録するような悪質な行為まで、メールアドレスを収集する際の様々な問題を目にしてきました。では、送信者が不適切な宛先にメール送信しないようにするにはどうすればいいでしょうか。最も信頼性の高い方法は、定期的に確認用メールを送信し、受信者が本文のリンクにアクセスしたら有効なメールアドレスだと判断する方法です。
しかし、この方法が常に最善であるとは限りません。短時間で宛先リストのクリーニングを完了したい場合や、サインアップの時点でメールアドレスが正しいかどうかをチェックしたい場合などは、別の方法で検証する必要があります。
この記事では、SendGridが推奨するメールアドレス検証の正しい方法や、避けるべき方法について紹介します。
メールアドレスの検証方法
宛先リストをクリーンな状態に保つことで、バウンス率を下げ、到達率やエンゲージメントを高めることができます。メールアドレスを検証するにはいくつかの方法があり、それぞれにメリットがありますが、まずは最も安全な方法から見ていきましょう。
メールアドレスの検証サービスを利用する
メールアドレスの有効性を検証する方法として、これまでにBriteVerifyやKickboxといったサービスを紹介してきました。検証サービスを利用して、メールアドレスの存在や宛先サーバの応答の有無などをチェックし、安全なメールアドレスのみを宛先リストに追加します。こうした事前準備をすることで、不適切な宛先にメール送信してレピュテーション(信頼性)を損なうリスクを回避することができます。
こういったサービスと同等の機能として、SendGridではEmail Address Validation APIを提供しています。この機能を使うと、一般的なスペルミスや無効なメールアドレス、team@company.comのようなロールアドレスなどを検知できます。Email Address Validation APIによるメールアドレスの検証には、あらゆるメールアドレスのパターンを学習させた機械学習モデルが使われています。
検証サービスを利用することは、メールボックスプロバイダでもベストプラクティスとされています。悪用を疑われるような通信を行わないため、送信者としての信頼性を損なうリスクがなく、安全で効果的な検証方法と言えます。検証後、有効なメールアドレスだけにメール送信することで、到達率の向上も期待できます。
しかし、メールアドレスの有効性の検証だけでは不十分です。高いエンゲージメントを維持しているかどうかを確認するには、開封率やクリック率を継続的にチェックするようにしましょう。
避けるべき検証方法
信頼性の高い検証方法がある一方で、送信者のレピュテーションを下げたり、正しい結果が得られなかったりする検証方法も知られています。これらの方法は理論的に正しくとも、意図した結果が得られるとは限りません。具体的に見ていきましょう。
VRFYコマンドを利用する
Simple Mail Transfer Protocol(SMTP)では、メールアドレスを検証するコマンドが提供されています。SMTPサーバへのTransmission Control Protocol(TCP)コネクションを開始すると、VRFYコマンドでメールアドレスの有無を検証できます。しかし、このコマンドを悪用すると、スパム送信者が特定組織のメールアドレスを無差別に収集できてしまいます。こうした問題を避けるために、ほとんどのメールサーバはVRFYコマンドを拒否します。SMTPの仕様としては検証可能ですが、実用的ではありません。
メール送信せずにSMTP通信を中断する
以下の図は、SMTP接続時のクライアントとサーバ間の通信を示しています。通常のメール送信(左図)では、クライアントが最後にDATAコマンドを送信して、メッセージのコンテンツを送信する準備ができたことをサーバに伝えます。続いて、クライアントが送信したコンテンツをサーバが受け取ると、メッセージの送信は完了です。その後は、新しいメッセージを送信するか、QUITコマンドを送ってコネクションを閉じます。
メールアドレスの検証(右図)でも、メール送信と同じようにSMTP接続を開始します。異なるのは、RCPT TOコマンド(宛先メールアドレスの設定)の応答をサーバから受け取った後のやり取りです。応答として返される”当該アドレス宛にメール送信できるか否か”の結果を取得したら、QUITもしくはRSETコマンドを送信するか、TCPコネクションをクローズして通信を終了します。DATAコマンドやメッセージのコンテンツは送信していないため、メールが送信されることはありません。
この方法では、送信者のレピュテーションを下げたり、検証用のメールがスパムメールと見なされたりするリスクはなく、一見すると良い方法にも思えます。しかし、以下のような問題があります。
- 頻繁に検証を行うと、異常なログとして検知されるかもしれません。インターネットを介して通信するSMTPサーバにおいて、メッセージを受け取る前に通信が中断されることは珍しくありませんが、試行を繰り返すと、悪意があると見なされてIPアドレスがブロックされる可能性があります。
- 多くのメールサーバやアンチスパムシステムでは、メッセージのコンテンツを受け取るまでメールアドレスの検証を保留にします。そのため、RCPT TOコマンドへの応答としてOKのレスポンスが返っても、必ずしもメールアドレスが有効であるとは限りません。
- 多くのメールサーバはグレイリスト(保留リスト)を利用しています。未知の送信元サーバが接続を試みるとグレイリストに登録し、一定の期間はその送信元サーバをブロックします。グレイリストに登録されている間はRCPT TOコマンドも拒否されるため、そのドメインのメールアドレスの検証は常に失敗します。
まとめ
最後に、メールアドレスを検証する際のポイントをまとめます。
- 確認用メールを送信しましょう。メールアドレスの有効性だけでなく、受信者がそのコンテンツに興味を持っているかどうかも確認できます。
- メールアドレスを安全かつ速やかに確認するためには、SendGridのEmail Address Validation APIのような検証サービスを使いましょう。
- SMTPのVRFYコマンドを利用したり、SMTP通信を中断したりする方法は避けましょう。頻繁に検証を行うと、メールボックスプロバイダから悪意のある送信者と見なされる恐れがあります。また、必ずしも正しい結果が得られるとは限りません。
最も効果的な方法は、確認用メールの送信と検証サービスによるチェックを組み合わせることです。これらの方法によって、タイプミスをチェックし、受信者がそのコンテンツを望んでいるかどうかを再確認できます。到達率とエンゲージメント率の向上にも役立つでしょう。
Email Address Validation APIを使ってみたい方は、ぜひFreeプランを取得してお試しください。