Ping检查真实电子邮件地址

5
有没有办法ping一封电子邮件或类似的方式来检查它是否是一个真正的有效地址?我不是在谈论正则表达式或php验证过滤器等,而是实际上检查该地址是否存在?

7
发送电子邮件并让他们点击链接进行验证?很多邮件服务器没有配置在电子邮件地址不存在时做出响应,即使有些邮件服务器设置了也不一定会发送错误信息。 - Jared Farrish
你可以ping一个服务器,但不能ping一个电子邮件地址。即使你ping成功了,也不能证明该电子邮件地址是真实存在的。 - usoban
1
所有的垃圾邮件发送者都会喜欢这个 ;) - Haza
3个回答

3

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


1
除了可靠性不足之外,它还可能对性能和用户体验产生不良影响,因为您必须打开一个带有一定超时的套接字连接。 - jm_toball

2

检查主机名是否存在的有用函数(90%有效!):

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;
}

1
你对此有多大的信心? - Mohammed Joraid

1
你可以检查相应域名的MX记录:getmxrr() http://php.net/manual/en/function.getmxrr.php 但我建议使用两部分验证: - 首先,使用一个简单的正则表达式对输入进行基本验证 - 然后,检查顶级域是否有效
// 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)...


filter_var($email, FILTER_VALIDATE_EMAIL)有什么问题吗? - biakaveron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接