58

電子メール アドレスが有効かどうかを検証すると主張する Web サイトをいくつか見つけました。PHPだけを使用してメールアドレスが有効かどうかを確認することはできますか?

<?php
    if($_POST['email'] != ''){
        // The email to validate
        $email = $_POST['email'];

        // An optional sender
        function domain_exists($email, $record = 'MX'){
            list($user, $domain) = explode('@', $email);
            return checkdnsrr($domain, $record);
        }
        if(domain_exists($email)) {
            echo('This MX records exists; I will accept this email as valid.');
        }
        else {
            echo('No MX record exists;  Invalid email.');
        }
    }
?>
<form method="POST">
    <input type="text" name="email">
    <input type="submit" value="submit">
</form>

これは私が今持っているものです。ドメインが存在するかどうかを確認しますがユーザーの電子メールがそのドメインに存在するかどうかは確認できません。PHPを使用してそれを行うことは可能ですか?

4

3 に答える 3

49

SMTP で確認する必要があります。

つまり、そのメールの SMTP サーバーに接続する必要があります。

SMTP サーバーに接続したら、次のコマンドを送信する必要があります。

HELO somehostname.com
MAIL FROM: <no-reply@gmail.com>
RCPT TO: <emailtovalidate@domain.com>

「<emailtovalidate@domain.com> リレー アクセスが拒否されました」というメッセージが表示された場合は、このメールが無効であることを意味します。

単純な PHP クラスがあります。あなたはそれを使用することができます:

http://www.phpclasses.org/package/6650-PHP-Check-if-an-e-mail-is-valid-using-SMTP.html

于 2013-10-09T05:00:24.007 に答える
43

単一の PHP メソッドだけを使用して、電子メールが実際に存在するかどうかを (信頼できるほど正確に) 検証することはできません。そのアカウントにメールを送信できますが、それだけではアカウントが存在することを確認できません (以下を参照)。少なくとも、少なくとも次のようにフォーマットされていることを確認できます

if(filter_var($email, FILTER_VALIDATE_EMAIL)) {
    //Email is valid
}

必要に応じて、別のチェックを追加できます。ドメインを解析してからcheckdnsrrを実行します

if(checkdnsrr($domain)) {
     // Domain at least has an MX record, necessary to receive email
}

多くの人は、ここまでたどり着きましたが、隠された方法が存在しないことにまだ納得していません。電子メールを検証することに縛られ、決心している場合に考慮すべきいくつかの注意事項を次に示します。

  1. スパマーは、「接続の手口」 (電子メールの送信を開始し、サーバーがその時点で戻ってくることに依存する) も知っています。他の回答の1つは、この警告があるこのライブラリへのリンクです

    スパマーがユーザーの電子メールをチェックして有効な電子メールをフィルタリングするのを防ぐために、一部のメール サーバーはテスト メッセージを静かに拒否します。

    つまり、無効なアドレスがある場合、無効なアドレスの応答が得られない可能性があります。実際、事実上すべてのメールサーバーには、すべての受信メールを受け入れるオプションが付いています ( Postfix でそれを行う方法は次のとおりです)。検証ライブラリにリンクする回答は、その警告に言及することを怠っています。

  2. スパムのブラックリスト。それらは IP アドレスによってブラックリストに登録され、サーバーが常に検証接続を行っている場合、Spamhaus または別のブロック リストに登録されるリスクがあります。ブラックリストに登録された場合、メールアドレスを検証することは何の役に立つでしょうか?

  3. 電子メール アドレスを確認することが本当に重要である場合、受け入れられている方法は、ユーザーに電子メールへの返信を強制することです。確認のためにクリックする必要があるリンクを含む完全なメールを送信します。スパムではなく、すべての応答に有効なアドレスが含まれていることが保証されます。

于 2013-10-09T03:07:48.677 に答える