【如何校验邮件地址的有效性】第五篇 :原理四
来源:互联网 发布:utorrent mac 下载慢 编辑:程序博客网 时间:2024/06/03 17:09
处理灰名单
现在我们终于被允许发送我们的RCPT TO命令,并有几个答案我们可以得到。正如我们已经提到的,代码250和251意味着收件人地址被接受。在这种情况下,我们可以将电子邮件地址标记为有效。我们也可以收到5xx代码的永久性错误。在这种情况下,我们可以将电子邮件标记为无效。但是,我们也可以以4xx代码的形式收到一个临时错误。这是什么意思呢?这意味着在这个时刻,服务器告诉我们,由于任何原因将无法传递我们的信息。因此,收件人的邮箱不可能无效,在这种情况下,服务器可能会向我们发送永久错误。因此,服务器很可能会认识到该邮箱是有效的,但也检测到阻止它继续的问题。我们使用可能和不太可能的术语 - 真正表达这些想法的不确定性,因为我们不能保证服务器在遇到问题报告之前对邮箱进行验证。如果灰名单不存在,我们的验证工作将会结束,我们在收到临时错误后,必须对电子邮件地址进行裁决。在这种情况下,我们会说电子邮件可能是有效的。
Greylisting是一种流行的反垃圾邮件方法,它利用对RCPT TO命令的临时错误响应。灰名单创建人工交付问题,以验证发件人是否符合SMTP协议的真实邮件传输代理,而不是任何简单的垃圾邮件发送程序。当一个正确的MTA收到一个临时错误,它不会完全放弃。它等待几分钟或几个小时,然后再次尝试。垃圾邮件发送者很少能够负担得起。实现灰名单的邮件服务器维护由客户端的IP地址,发件人地址和收件人的地址组成的三元组数据库。当第一次看到特定的三元组时,会返回一个临时错误。如果客户在一段时间后再次尝试,可能会被允许,取决于自第一次尝试以来经过了多少时间。一些服务器被配置为允许在几分钟后尝试,一些服务器需要更长的时间,长达几个小时。
如果我们要支持与灰名单服务器管理的电子邮件验证,我们不得不临时错误响应代码作出反应RCPT TO通过从服务器断开,等待一段时间,然后再次尝试。请注意,尝试另一个MX服务器(如果可用)将无法帮助我们。通常实现灰名单,以便如果一个邮件服务器启用,那么所有域的邮件服务器都有它。三元组的数据库在所有目标服务器之间共享,这意味着我们无法尝试另一台服务器。我们真的需要等待再试一次。我们应该等待多久?在我们第二次尝试之前,几分钟是合理的。但是由于某些服务器需要几个小时的延迟,
许多服务器在由于灰名单而返回临时错误时,会提供执行灰名单的信息,有些服务器甚至提供有关何时接受下一次尝试的信息。然而,这些附加数据可能存在或可能不存在,最重要的是,它们的格式与一个服务器软件不同。所以,我们尝试以某种方式解析它们并不是非常有益的。
以下是RCPT TO命令的一些示例:
C: RCPT TO:<test@gmail.com>S: 550-5.1.1 The email account that you tried to reach does not exist. Please tryS: 550-5.1.1 double-checking the recipient's email address for typos orS: 550-5.1.1 unnecessary spaces. Learn more atS: 550 5.1.1 http://support.google.com/mail/bin/answer.py?answer=6596 q17si5372562igi.1 - gsmtpC: RCPT TO:<goodaddress@gmail.com>S: 250 2.1.5 OK q17si5372562igi.1 - gsmtp
在这个例子中,我们可以看到,test@gmail.com不是一个有效的电子邮件地址,因为返回永久错误代码550。然后我们尝试goodaddress@gmail.com,这被确认是一个有效的电子邮件地址。
第二个例子显示了实现灰名单的邮件服务器的响应:
C: RCPT TO:<xxx@censored.pl>S: 451 Temporary local problem - please try laterC: QUIT... Connecting to server again after 2 minutes, sending EHLO, MAIL FROM ...C: RCPT TO:<xxx@censored.pl>S: 250 Accepted
在这种情况下,一个未公开的波兰服务器实现了对我们的RCPT TO命令的灰名单和临时错误451的报告。然后2分钟后,接受相同的命令。
一次性电子邮件服务和处理全部地址
如果我们确定给定的电子邮件地址是有效的,我们可能有兴趣获得更多的信息。在我们的验证者中,我们提供信息,无论目标电子邮件是由一次性电子邮件服务(也称为10分钟)托管。这通过查找这些服务使用的域的数据库来完成。虽然这绝对不会100%准确,因为我们不知道一直有一次性的电子邮件域,可以覆盖绝大多数这些服务。
最后,我们可能想要识别并报告具有启用的catch-all地址的域。只需通过发送额外的RCPT TO命令,将收件人地址设置为不会有效的电子邮件地址即可完成此操作,除非启用所有机制。我们只需生成一个足够长的随机字符串,以避免与任何现有地址的冲突。我们使用12个字符的字符串。
以下是一个测试正常电子邮件地址的例子,然后测试mailinator.com上的全部地址,这是一个可启用全部地址的一次性电子邮件服务。
S: 220 mail.mailinator.com ESMTP PostfixC: EHLO mail.example.comS: 250-mail.mailinator.comS: 250-8BITMIMES: 250-SIZE 150000S: 250 OkC: MAIL FROM:<verifier@example.com>S: 250 OkC: RCPT TO:<john@mailinator.com>S: 250 OkC: RCPT TO:<ze6V7y6rcZEV@mailinator.com>S: 250 OkC: QUITS: 221 Bye
起初,服务器确认john@mailinator.com是一个有效的电子邮件地址。然后我们通过验证随机电子邮件地址ze6V7y6rcZEV@mailinator.com来检查是否启用全部地址。既然这也被接受了,我们得出结论,全部地址是启用的,因此我们不能确定是否接受了john@mailinator.com,因为该邮箱存在或仅仅是因为全部地址。
来源:http://www.emailcamel.com/zh-hans/node/11
- 【如何校验邮件地址的有效性】第五篇 :原理四
- 【如何校验邮件地址的有效性】第二篇 :原理一
- 【如何校验邮件地址的有效性】第三篇 :原理二
- 【如何校验邮件地址的有效性】第四篇 :原理三
- 【如何校验邮件地址的有效性】:目录
- 【如何校验邮件地址的有效性】第一篇 :为什么要校验邮箱地址有效性?使用场景在哪里?
- 邮件地址有效性验证的正则表达式
- 一个检查邮件地址有效性的正则表达式程序
- 校验身份证号码的有效性【JS】
- 有效性校验
- 编程实现邮件地址有效性检测
- 编程实现邮件地址有效性检测
- Java scripte 校验身份证号码的有效性
- 身份证有效性校验
- 正则表达式对邮件地址进行校验以及从一个字符串中匹配出一个格式正确的邮件地址
- 浅谈在ASP.NET中数据有效性校验的方法
- 浅谈在ASP.NET中数据有效性校验的方法
- 浅谈在ASP.NET中数据有效性校验的方法!
- SAP中记账码的作用
- 【如何校验邮件地址的有效性】第四篇 :原理三
- 【LeetCode】78. Subsets
- java.sql.SQLException: 索引中丢失 IN 或 OUT 参数:: 6
- docker在低内核版本centos上的安装步骤
- 【如何校验邮件地址的有效性】第五篇 :原理四
- 基于canvas的图像混合物检测
- 为何阿拉伯军队难赢以色列?
- 电梯—测试用例设计
- sql中sequence的用法
- 【Android错误汇总】genymotion连不上网-Fragment图层叠加-UI的一些问题
- 【Python】三、Scipy——《用Python做科学计算》
- 关于redhat版linux系统安装Centos版yum源
- 多线程问题