2010-04-13 73 views
1

我正在运行一个拥有超过60 000注册用户的网站。每周通知都通过电子邮件发送给这些用户,现在我注意到一些邮件地址不再存在了,例如。域名地址是有效的,但因为人没有在公司工作的电子邮件名称EN asdas @已不再有效了等等。现在,我通过循环数据库,并做一些正则表达式检查,并检查是否与存在的MX记录以下两个功能检查有效的电子邮件地址

function verify_email($email){ 

    if(!preg_match('/^[_A-z0-9-]+((\.|\+)[_A-z0-9-]+)*@[A-z0-9-]+(\.[A-z0-9-]+)*(\.[A-z]{2,4})$/',$email)){ 
     return false; 
    } else { 
     return true; 
    } 
} 

// Our function to verify the MX records 
function verify_email_dns($email){ 

    list($name, $domain) = split('@',$email); 

    if(!checkdnsrr($domain,'MX')){ 
     return false; 
    } else { 
     return true; 
    } 
} 

如果电子邮件地址格式无效或域不存在,我删除用户帐户。如果域名有效并且电子邮件地址格式正确,是否有任何方法可用于检查电子邮件地址是否仍然存在?例如[email protected]不再存在,但test.com是一个有效的域名。

注:如果邮件被发送到用户的电子邮件地址不存在了我在收件箱中收到电子邮件导致每天1000次,我正在努力避免的。

+1

注意的人,您使用正则表达式有拒绝一大堆有效的电子邮件地址已经...我会忽略域名检查,这是不值得的,发送邮件时无论如何将完成。 – Joey 2010-04-13 07:40:56

+1

我认为你可以做的最好的事情是自动检查你的收件箱是否有退回的邮件,并从数据库中删除这些条目。 – Jens 2010-04-13 07:45:46

回答

5

的标准方法是连接到远程邮件服务器,并发送一个VRFY命令。但是,有些服务器不允许这样做,因为它使垃圾邮件发送者更容易找到有效的电子邮件地址。您也可以尝试发送一个RCPT TO命令(如果地址无效,您将得到550响应),但如果您这样做的次数太多,它们往往会阻止您,出于同样的原因

如果您已经获得在您的收件箱反弹电子邮件,好像你可以只解析那些和自动删除从列表中所造成递送失败

+0

我也有一个答案,但你的更好。我还建议定期选择加入机制(邮件每年回复一次),但这有点超出问题的范围。 – extraneon 2010-04-13 07:45:45