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