验证硬退回的电子邮件 ID

validate email ids for hard bounce

我试过搜索,但我只得到在线付费服务,没有代码来测试给定的电子邮件地址是否真的存在,所以我可以防止硬退回。

请看下面的代码,它只能检查域。需要帮助是可能的。解决方案可以是任何语言,PHP(首选),JAVA.NET, 鲁迪

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

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

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

这就是电子邮件验证服务的工作原理。他们执行这些握手,然后存储结果。这就是您在提供的示例中看到的情况;在 RCPT TO.

之后,客户 QUITting

还有一些其他选项:

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

  2. 更高级 - 取决于您尝试防止硬退回的目的。我曾经考虑过将启发式方法放在例如用户名应至少 X 个字符长,域 Y 个字符长,但已放弃。单字符用户名有效;我不确定域名的最低限度。如果有人想打破这些规则,那是微不足道的;所以没有意义。

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

  4. 使用电子邮件验证服务,例如 Kickbox。这些服务会查看许多电子邮件地址,并且通常会缓存相关数据并准备好使用,无需等待或无需执行握手。

  5. 为什么不直接发送电子邮件并要求用户单击 link。这就是许多服务已经开始做的事情。剔除硬反弹。此外,它确保订阅者提供他们拥有的电子邮件地址。