验证电子邮件perl,例如Mail :: VRFY

时间:2015-03-04 12:29:40

标签: perl email

我正在尝试验证几封电子邮件。 问题是我与http://verify-email.org/和Mail :: VRFY有不同的结果,其中1st更接近现实。

是的我知道检查现有用户是不可靠的,但仍然如此。

我收到的是

 One Advertised SMTP server permanently refused mail

或者如果我尝试使用Mail :: CheckUser

 No such user

服务器是否通过IP过滤拒绝我的请求?就像我从可疑区域运行我的脚本一样,我被拒绝了?

如果是的话,怎么能克服这个...看起来不像代理人的LWP那么简单: - (

1 个答案:

答案 0 :(得分:1)

没有尝试传递,没有好方法可以验证电子邮件地址是否存在。 verify-email.org,Mail :: CheckUser和Mail :: VRFY似乎使用相同的技术,发送MAIL FROMRCPT TO然后在听到响应之后但在发送实际邮件之前关闭连接

发送电子邮件已经演变成垃圾邮件发送者和邮件服务器之间的复杂措施,对策,反措施等。 verify-email.org可能知道如何进行这种舞蹈,其中包括MX和DNS记录的特殊设置。 J.RANDOM.COMPUTER.net没有那个,如果你是从家庭网络做的那样你是probably already on a blacklist,不是因为你做错了什么,而是假设。 Mail :: VRFY和Mail :: CheckUser可能不知道如何看起来像合法的邮件服务器。

Mail :: CheckUser在No such user显示时并不完全准确。 code in Mail::CheckUser::check_user_on_host()的峰值显示原因。

    if($code == 550 or $code == 551 or $code == 553) {
        return _result(CU_UNKNOWN_USER, 'no such user');
    }

Those SMTP codes are ...

  • 550 - 请求的命令失败,因为用户的邮箱不可用(例如,因为找不到它,或者因为策略原因拒绝了命令)​​。
  • 551 - 收件人不是服务器的本地用户。然后服务器提供一个转发地址来尝试。
  • 553 - 由于邮箱名称无效,命令已中止。

Mail::VRFY is doing the same thing但是对于所有500个代码。

}elsif($rt[-1] =~ /^5\d{2}/){
    # host rejected
    return 7;
}

其中7是“一个广告的SMTP服务器永久拒绝邮件。”

同时,Email::Valid将验证语法并验证域是否存在。

您最好的办法是使用预先存在的外部服务,或者可以完全访问您可以控制的真实邮件服务器,或者完成所有工作以设置真正的邮件服务器。