问:我正在使用以下代码来验证电子邮件地址是否具有有效的DNS(否则,我们认为该电子邮件无效)。
$domain = substr($email, strrpos($email, '@') + 1);
$isValid = checkdnsrr($domain, 'MX') || checkdnsrr($domain, 'A');
但是,今天它只是将几乎所有@ gmail.com和@ yahoo.com电子邮件标记为无效。显然,gmail.com和yahoo.com域是有效的。
为什么对于无效电子邮件会有如此多的误报?我该怎么做才能更准确?
答:据我所知,没有一种自动的方法可以在不发送带有激活链接的电子邮件(或回传电子邮件已打开的旧图像像素)的情况下验证电子邮件地址。这是我多年来尝试过很多方法的一个问题,有时会遇到一些“陷阱”,直到几个月后才意识到我还没有。
当然,正则表达式验证是第一步,对电子邮件地址的域执行ping操作以查看您是否可以获得任何东西,而checkdnsrr则不是那么多,因为不是每个服务器都以这种查询方式来回复信息。
有几种库和类试图减少不确定性(我想过smtp电子邮件验证),但是即使它们做了承诺的事情-减少了不确定性-您仍然不能依靠它们来创建验证过程。
(顺便说一下,出于我完全同意的原因gmail ...将daniwebmail.com标记为垃圾邮件(我不同意这是垃圾邮件,但我同意被标记为垃圾邮件的原因))