SMTP电子邮件验证程序会在不存在的电子邮件上引发错误

时间:2015-09-13 08:25:56

标签: php email smtp

我使用Google Code中的SMTP验证程序来验证我的电子邮件。作为测试运行,我输入一个不存在的电子邮件:[... @ crappyCoconuts.com]但是,它不会使用我的die()错误消息,而是抛出另外2条错误消息,告知它不会连接而域名确实没有不存在。 如何正确检查电子邮件是否存在并返回正确的消息?我知道我可以简单地压制error_reporting(0),但这只会隐藏问题,而不是解决它。

if (preg_match("/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i", $email)) {
    if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $SMTP_Validator = new SMTP_validateEmail();

        $results = $SMTP_Validator->validate(array($email));
        if (!$results[$email]) {
            die("Your email address does not exist");
            $dbh = null;
        }
    } else {
        die("Your email address is in improper format");
        $dbh = null;
    }
} else {

    die("Your email address is in improper format");
    $dbh = null;
}

错误讯息:

Warning: fsockopen(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /home/u313677887/public_html/smtp_validateEmail.class.php on line 154

Warning: fsockopen(): unable to connect to crappyCoconuts.com:25 (php_network_getaddresses: getaddrinfo failed: Name or service not known) in /home/u313677887/public_html/smtp_validateEmail.class.php on line 154

1 个答案:

答案 0 :(得分:0)

您可以使用set_error_handler实现自定义错误处理程序,也可以使用@fsockopen()而不是fsockopen()来抑制输出警告。然后,您可以检查fsockopen()返回的内容。

  

fsockopen()返回一个文件指针,该指针可以与其他文件函数一起使用(例如fgets(),fgetss(),fwrite(),fclose()和feof())。如果调用失败,则返回FALSE。

错误表示域名无效,因此电子邮件地址无效。