【问题标题】:validate email ids for hard bounce验证电子邮件 ID 以进行硬退回
【发布时间】:2015-01-27 11:30:10
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java php .net ruby email-bounces


    【解决方案1】:

    至少,需要打开与接收服务器的 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. 为什么不简单地发送电子邮件并要求用户单击链接。这就是许多服务已经开始做的事情。清除硬弹跳。此外,它还确保订阅者提供他们拥有的电子邮件地址。

    【讨论】:

    • 我确信没有万无一失的方法来检查电子邮件地址是否存在,但是像 varify-email 这样的服务非常准确,他们是如何做到的?
    • @Saqueib 请参阅verify-email.org/faq.html 了解其工作原理以及For some domains you can't verify whether the address is good or not, because their mail servers don't cooperate.
    • @RDay 所以不可能!!!我们最多可以使用正则表达式发送validate 电子邮件并检查域是否存在并祈祷user@dmain.com 也存在:) 如果数据库来自客户端
    • @Saqueib 正确,仅使用地址无法验证电子邮件是否存在。您可以发送一个链接来验证他们的电子邮件并将其记录为已验证。
    • 我已经更新了这个答案,因为它并不完全正确。 SMTP 握手通常可以在没有实际发送消息的情况下确定地址的有效性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    • 2018-06-11
    • 1970-01-01
    • 2011-05-11
    • 2017-11-19
    • 2011-01-31
    相关资源
    最近更新 更多