我尝试过搜索,但我只获得在线付费服务,没有代码可以测试给定的电子邮件地址确实存在,所以我可以防止硬反弹。
请参阅下面的代码,该代码只能检查域名。需要帮助是可能的。解决方案可以使用任何语言, 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
他们正在做什么,发送电子邮件?
答案 0 :(得分:4)
至少,需要向接收服务器打开SMTP连接,以检查是否存在电子邮件地址。实际上不需要发送电子邮件。如果电子邮件不存在,大多数电子邮件服务器将响应RCPT TO
命令并显示错误。此时,可以在不实际发送电子邮件的情况下发送QUIT
命令。某些电子邮件服务器还允许您发出VRFY
命令来测试地址,但这并没有得到广泛支持。
这是电子邮件验证服务的工作方式。他们执行这些握手,然后存储结果。这就是你在你提供的例子中看到的情况;客户在QUIT
之后RCPT TO
。
还有其他一些选择:
最基本 - 测试电子邮件地址是否有效。此页面有一个正则表达式,用于检查 - http://www.regular-expressions.info/email.html
更高级 - 取决于您试图阻止硬反弹的目的。我曾经想过将启发式算法放在例如用户名应该是min X个字符长,而域Y char很长,但是放弃它。单字符用户名有效;我不确定域名的最低要求。如果有人想要击败这些规则,这是微不足道的;所以没有意义。
更高级 - 当您遇到新域时,请连接到接收SMTP服务器并开始SMTP握手。检查对RCPT TO
命令的响应。
使用电子邮件验证服务,例如Kickbox。这些服务可以看到许多电子邮件地址,并且通常可以缓存相关数据并准备就绪,无需等待或不必进行握手。
为什么不简单地发送电子邮件并要求用户点击链接。这就是许多服务开始做的事情。消除硬弹跳。此外,它还确保订户提供他们拥有的电子邮件地址。