在PHP中检查是否存在电子邮件ID

时间:2016-10-04 12:06:22

标签: php email smtp phpmailer

我正在尝试使用php来检查电子邮件ID是否存在。我检查了许多示例,文章如 https://code.google.com/archive/p/php-smtp-email-validation/ https://github.com/webdigi/SMTP-Based-Email-Validation/blob/master/checkemailexample.php。 所有看起来都是一样的。在gmail的情况下,所有工作都很完美,但在雅虎等其他邮件服务中无法正常工作。 有没有办法在发送邮件之前检查所有电子邮件ID?

2 个答案:

答案 0 :(得分:1)

我还没有找到一个好的验证工具。最好的办法是验证格式是否正确。然后测试它,向用户发送消息并要求他们执行某种链接回您网站的操作。您可以轻松使用php和数据库记录用户与您的站点进行交互的时间。然后,您将确定该地址是有效的,并且是针对您预期的用户。这也是避免被标记为垃圾邮件的最佳做法。

这是我发现的用于验证格式的最佳jQuery脚本:

function isValidEmailAddress(emailAddress) {
    var pattern = new RegExp(/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i);
    return pattern.test(emailAddress);
};

答案 1 :(得分:0)

连接,发布RCPT TO并删除连接很可能会让您被雅虎等列入黑名单。唯一可靠的方法是继续发送您要发送的消息。如果它成功了,那很好,如果不成功,你最好有一个弹跳处理器准备好接收弹跳,处理它,然后你就会知道下一次。

你可以通过简单的RFC验证显然消除一些地址,例如使用PHP的filter_var函数,因为任何失败的东西都不太可能传递,你也可以查找域是否存在并且可以接收邮件完全 - 检查DNS中是否存在MX和A记录 - 但除此之外,如果没有真正发送消息,您将无法分辨。