技術解説 · 出典付きの回答
メールのドメインが有効かどうかを確認する方法
メールのドメインが有効かどうかを確認するには、Mail Exchanger(MX)レコードのDNSルックアップを実行し、そのドメインがメールを受信できるよう設定されていることを確かめます。メールサーバーを指す有効なMXレコードが少なくとも1つあれば、そのドメインはメール用として有効とみなされます。MXレコードが存在しない場合、Aレコードへのフォールバックが行われない限り、そのドメインはメールを受信できません。ただし、現在の構成ではこれはまれです。
構文のバリデーション
最初のステップは、ドメインがRFC 5322の標準に従っていることの確認です。メールアドレスのドメイン部には、トップレベルドメインが含まれ、特定の文字ルールに従っている必要があります。ネットワークリクエストを行う前に、正規表現を使って不正な文字や連続したドットがないことを確認します。これにより、明らかに不正な形式の文字列に対する不要なDNSクエリを防げます。
MXレコードのルックアップ
ドメインのMXレコードに対してDNSクエリを実行します。MXレコードは、そのドメインに代わってメールメッセージを受け付けるメールサーバーを指定するものです。DNSクエリが1つ以上の有効なMXレコードを返せば、そのドメインは技術的にメールを受信できます。手動での確認にはdigやnslookupなどのツールを使え、大量のチェックにはプログラミングライブラリの非同期メソッドを利用できます。
Aレコードへのフォールバック
SMTPの標準では、MXレコードが存在しない場合、送信サーバーはドメインのAレコードに指定されたIPアドレスへのメール配信を試みることがあります。これはレガシーな動作ですが、Aレコードを確認することで2段階目のバリデーションになります。ただし、MXレコードとAレコードのどちらも存在しなければ、そのドメインはメール配信に使えない無効なドメインだと確定します。
確認用のツール
これを大規模に実装する開発者にとっては、DNSクエリを直接管理するより専用のバリデーションサービスを使うほうが効率的です。SendHQは https://sendhq.cc/tools で無料ツールを提供しており、ドメインの設定確認に役立ちます。これらのツールはルックアップの処理を自動化し、配信の失敗につながりやすい一般的な設定ミスをチェックします。
DNSの失敗への対処
NXDOMAIN応答とタイムアウトを区別してください。NXDOMAIN応答は、ドメインが存在しないことを明示的に示します。タイムアウトやSERVFAILは、一時的なDNSの問題や制限の厳しいファイアウォールを示している可能性があります。一時的なネットワーク障害の間に有効なドメインを無効と判定しないよう、確定的でないエラーには指数バックオフを使った再試行ロジックを実装してください。
よく寄せられる質問
有効なMXレコードがあれば、メールアドレスが存在することは保証されますか?
いいえ、MXレコードで確認できるのは、そのドメインがメールを受信できることだけです。そのサーバー上に特定のメールボックスやユーザーが存在するかどうかは確認できません。
MXレコードがなくてもドメインが有効な場合はありますか?
はい、ドメインにAレコードがあれば、一部のSMTPサーバーはそのIPへの配信を試みます。ただし、現在のメールではこれは標準的な方法ではありません。
ドメインのバリデーションとメールアドレスのバリデーションの違いは何ですか?
ドメインのバリデーションはドメインがメール用に設定されているかを確認し、メールアドレスのバリデーションは特定のアドレスの構文とドメインの状態を確認します。
一次情報源
- RFC 5321:簡易メール転送プロトコル(SMTP) — RFC Editor
- RFC 5322:インターネットメッセージ形式 — RFC Editor
- Cloudflare DNSドキュメント — Cloudflare