2

我正在进行电子邮件验证检查,我们需要决定是否允许将 user@localhost 和 user@example(注意没有 .anything)验证为有效的电子邮件地址。这适用于一个开源项目,该项目在大型 Web 和 Intranet 上都有许多用例。

RFC 2822(互联网消息格式标准)允许它,但RFC 2821(SMTP 标准)说它应该失败。

想法?

4

6 回答 6

1

我会禁用它。很少有组织使用内部域,而那些通常使用“acme.localhost”或“intranet.com”或其他类似名称的组织。他们使用 DNS 进行某种配置以使其正常工作。

无论如何,内部电子邮件几乎已经死了:随着即时消息、Twitter 和 SMS 的出现以及公司每个成员的外部电子邮件可用性的增加,您几乎完全有可能永远不会获得无 TLD 的域在一封电子邮件中。

对于确实需要它的人,他们总是可以自己调整正则表达式,因为他们足够精明,可以设置自定义主机名来处理内部电子邮件。

于 2009-11-15T21:30:09.367 回答
1

这取决于您的应用程序。如果你认为你的几个用户会有一个电子邮件@localhost,你不介意。然后去吧。

于 2008-09-17T14:22:18.457 回答
1

让它成为一个可配置的选项,这样人们就可以自己决定。我个人默认它是失败的,因为我还没有遇到过一个案例——内联网或公共互联网——我让有人使用了有效的 user@localhost 类型的地址。

于 2008-09-17T14:22:21.360 回答
0

看看这个,您似乎需要两个详细的快速检查:

<?php 
function valid_email($email) { 
    // First, we check that there's one @ symbol, and that the lengths are right 
    if (!ereg("^[^@]{1,64}@[^@]{1,255}$", $email)) { 
     // Email invalid because wrong number of characters in one section, or wrong number of @ symbols.
     return false; 
    }

    // take a given email address and split it into the username and domain. 
    list($userName, $mailDomain) = split("@", $email); 
    if (checkdnsrr($mailDomain, "MX")) { 
        // this is a valid email domain! 
        return true;
    } 
    else { 
        // this email domain doesn't exist!
        return false;
    }
} 
?>

来源 1来源 2

于 2008-09-17T16:57:17.680 回答
0

好吧,如果您有 DNS 在内部工作,您总是可以只进行 DNS 查找。

但是,如果使用 SMTP 会失败,那么我建议确保您不包含它。

于 2008-09-17T14:22:33.793 回答
0

我见过 user@localhost 形式的电子邮件地址,通常是在查看邮件列表的存档时,并且管理员在同一台机器上托管和发布。所以它肯定会发生 - 我承认它打破了我的解析程序!所以现在我对电子邮件地址更加灵活了。

于 2008-09-17T14:24:29.873 回答