【如何校验邮件地址的有效性】第五篇 :原理四

 

处理灰名单

现在我们终于被允许发送我们的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 try
S: 550-5.1.1 double-checking the recipient's email address for typos or
S: 550-5.1.1 unnecessary spaces. Learn more at
S: 550 5.1.1 http://support.google.com/mail/bin/answer.py?answer=6596 q17si5372562igi.1 - gsmtp
C: 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 later
C: 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 Postfix
C: EHLO mail.example.com
S: 250-mail.mailinator.com
S: 250-8BITMIME
S: 250-SIZE 150000
S: 250 Ok
C: MAIL FROM:<verifier@example.com>
S: 250 Ok
C: RCPT TO:<john@mailinator.com>
S: 250 Ok
C: RCPT TO:<ze6V7y6rcZEV@mailinator.com>
S: 250 Ok
C: QUIT
S: 221 Bye

起初,服务器确认john@mailinator.com是一个有效的电子邮件地址。然后我们通过验证随机电子邮件地址ze6V7y6rcZEV@mailinator.com来检查是否启用全部地址既然这也被接受了,我们得出结论,全部地址是启用的,因此我们不能确定是否接受了john@mailinator.com,因为该邮箱存在或仅仅是因为全部地址。

 

 

EmailCamel专注全球邮箱验证,让发邮件更容易!领取+200邮箱验证量,快速体验

扫码关注我们(已有+5000关注),获取邮箱验证及海外群邮干货!