ping以检查真实的电子邮件地址

时间:2011-03-25 09:18:53

标签: php email

无论如何要ping一个电子邮件地址或类似的事情来检查它是一个真正的工作地址。我不是在谈论正则表达式或php验证过滤器等,但实际上检查地址是否存在?

3 个答案:

答案 0 :(得分:3)

连接到收件人邮件服务器并提供邮件,提示邮件服务器拒绝或接受邮件是可能的,但不可靠。并非所有邮件服务器都会检查地址的有效性,因此请不要依赖它。 类似问题here

答案 1 :(得分:2)

检查主机名的有用功能存在(90%工作!):<​​/ p>

function validate_email($email)
{
    if(!preg_match ("/^[\w\.-]{1,}\@([\da-zA-Z-]{1,}\.){1,}[\da-zA-Z-]+$/", $email))
        return false;
    list($prefix, $domain) = explode("@",$email);
    if(function_exists("getmxrr") && getmxrr($domain, $mxhosts))
        return true;
    elseif (@fsockopen($domain, 25, $errno, $errstr, 5))
        return true;
    else
        return false;
}

答案 2 :(得分:1)

您可以检查相应域是否有MX记录: getmxrr()http://php.net/manual/en/function.getmxrr.php

但我建议使用两部分验证: - 首先是simple正则表达式,用于输入的简单验证 - 然后进行simple检查以确定tld是否有效

// pattern was taken from PHP's own source
$pattern =  "/^((\\\"[^\\\"\\f\\n\\r\\t\\b]+\\\")|([A-Za-z0-9_][A-Za-z0-9_\\!\\#\\$\\%\\&\\'\\*\\+\\-\\~\\/\\^\\`\\|\\{\\}]*(\\.[A-Za-z0-9_\\!\\#\\$\\%\\&\\'\\*\\+\\-\\~\\/\\^\\`\\|\\{\\}]*)*))@((\\[(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))\\])|(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))|((([A-Za-z0-9])(([A-Za-z0-9\\-])*([A-Za-z0-9]))?(\\.(?=[A-Za-z0-9\\-]))?)+[A-Za-z]+))$/D";
if (preg_match($pattern, $email)) {
    /**
     * allow ip address as domain OR it should be a valid TLD
     */
    $long = ip2long(substr($email, strrpos($email, '@')+1));
    return (($long !==FALSE && $long>-1)
        || isValidTld(substr($email, strrpos($email, '.')+1)));
}

除了发送电子邮件和捕获可能的反弹之外,这仍然无法保证它有效...这几乎是(除了mx-check)它......