验证电子邮件ID以获得硬弹跳

时间:2015-01-27 11:30:10

标签: java php .net ruby email-bounces

我尝试过搜索,但我只获得在线付费服务,没有代码可以测试给定的电子邮件地址确实存在,所以我可以防止硬反弹。

请参阅下面的代码,该代码只能检查域名。需要帮助是可能的。解决方案可以使用任何语言, PHP (首选), JAVA .NET Rudy

public function check_domain($email)
{
    if( ! (bool) checkdnsrr(preg_replace('/^[^@]++@/', '', $email), 'MX'))
    {
        return FALSE;
    }

    return TRUE;
}

更新

使用在线服务,它显示类似这样的内容

MX record found: mta6.am0.yahoodns.net (Priority 1)
MX record found: mta5.am0.yahoodns.net (Priority 1)
MX record found: mta7.am0.yahoodns.net (Priority 1)
Connecting to mta6.am0.yahoodns.net
Connected to mta6.am0.yahoodns.net
Dialog with mta6.am0.yahoodns.net ok
------------------------------------------------------------
220 mta1278.mail.bf1.yahoo.com ESMTP ready
HELO verifyemailaddress.org
250 mta1278.mail.bf1.yahoo.com
MAIL FROM: <noreply@verifyemailaddress.org>
250 sender <noreply@verifyemailaddress.org> ok
RCPT TO: <xxxxx@yahoo.com>
250 recipient <xxxxxx@yahoo.com> ok
QUIT
221 mta1278.mail.bf1.yahoo.com
------------------------------------------------------------
Email address xxxxxx@yahoo.com accepted

他们正在做什么,发送电子邮件?

1 个答案:

答案 0 :(得分:4)

至少,需要向接收服务器打开SMTP连接,以检查是否存在电子邮件地址。实际上不需要发送电子邮件。如果电子邮件不存在,大多数电子邮件服务器将响应RCPT TO命令并显示错误。此时,可以在不实际发送电子邮件的情况下发送QUIT命令。某些电子邮件服务器还允许您发出VRFY命令来测试地址,但这并没有得到广泛支持。

这是电子邮件验证服务的工作方式。他们执行这些握手,然后存储结果。这就是你在你提供的例子中看到的情况;客户在QUIT之后RCPT TO

还有其他一些选择:

  1. 最基本 - 测试电子邮件地址是否有效。此页面有一个正则表达式,用于检查 - http://www.regular-expressions.info/email.html

  2. 更高级 - 取决于您试图阻止硬反弹的目的。我曾经想过将启发式算法放在例如用户名应该是min X个字符长,而域Y char很长,但是放弃它。单字符用户名有效;我不确定域名的最低要求。如果有人想要击败这些规则,这是微不足道的;所以没有意义。

  3. 更高级 - 当您遇到新域时,请连接到接收SMTP服务器并开始SMTP握手。检查对RCPT TO命令的响应。

  4. 使用电子邮件验证服务,例如Kickbox。这些服务可以看到许多电子邮件地址,并且通常可以缓存相关数据并准备就绪,无需等待或不必进行握手。

  5. 为什么不简单地发送电子邮件并要求用户点击链接。这就是许多服务开始做的事情。消除硬弹跳。此外,它还确保订户提供他们拥有的电子邮件地址。