約5万件の連絡先があるCRMを使用していますが、情報の送信先について真剣に考えたいと思います。これの多くの手順の1つは、電子メールアドレスの検証です。
サーバーにpingを実行するスクリプトを書くだけで十分でしょうか?リストから真のハードバウンスを取り除くことを探しています。ドメインのようなものはもはや有効ではないか、明らかに完全なゴミ([email protected])であるメールアドレス<-実際の例。
最初のステップは、コマンドを使用してドメインのチェックを行い、メールエクスチェンジャーを特定することです...
nslookup -q=mx domain.com
次のような応答を受け取るはずです...
Non-authoratative answer:
domain.com mail exchanger = 0 mx1.domain.com
domain.com mail exchanger = 0 mx2.domain.com
注意:返されるレコードの数は、ドメインゾーンファイル内のMXレコードの数になります。
メール交換機のアドレスがわかったので、次のステップはメール交換機に接続することです...
telnet mx1.domain.com 25
次のような応答を受け取るはずです
Connected to mx1.domain.com 25
Escape character is '^]'.
220 mx1.domain.com ESMTP
コマンド
helo hi
応答
250 mx1.domain.com
コマンド
mail from <[email protected]>
応答
250 2.1.0 Ok
コマンド
rcpt to: <[email protected]>
これで、次の応答は、サーバー上に電子メールアドレスが存在するかどうかを示します...
550 5.1.1 <[email protected]>: Recipient address rejected: Unknown user in virtual alias table
コマンド
quit
応答
221 2.0.0 Bye
基本的に、このコマンドと応答のシーケンスが行ったことは、SMTPサーバーが実行するのと同じコマンドと応答のシーケンスをエミュレートして、最初の段階だけにメールを送信することです。このチェックを行うと、電子メールアドレスが存在するかどうかを確認する応答が得られます。存在する場合、それは有効なメールアドレスですが(ただし、期待するユーザーに属しているという意味ではありません)、rcpt to
チェックを行うときに550エラー応答を受け取った場合、そのメールアドレスは現在、メールサーバーには存在しません。すべてのメールエクスチェンジャーが同じデータを返し、同じドメイン名の共通アドレスエイリアステーブルを処理する必要があるため、このコマンドシーケンスでメールエクスチェンジャーの1つをチェックするだけです。
これはスクリプト化できますが、ProWebmasters SEの範囲を少し超えており、使用する必要のある任意の言語で実行できます。基本的にブール値を返す関数ですべてをラップすることで、チェックを実行できます。チェック(ドメインなし、MXレコードなし、SMTP 550エラー)がある場合はfalseを返すことができ、チェックは失敗したと見なされます。メールアドレスは無効であり、その時点ではメールを受信しません。