在电子邮件验证中允许user @ example或user @ localhost?

时间:2008-09-17 14:18:56

标签: php email web-applications

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

RFC 2822(Internet邮件格式标准版)允许它,但RFC 2821(SMTP标准版)说它应该失败。

思想?

6 个答案:

答案 0 :(得分:1)

这取决于您的申请。如果您认为您的几个用户将收到@localhost的电子邮件,并且您不介意。然后去吧。

答案 1 :(得分:1)

将其设为可配置选项,以便人们可以自行决定。我个人默认默认它失败了,因为我还没遇到案例 - 内联网或公共互联网 - 我曾经有人使用有效的用户@ localhost类型地址。

答案 2 :(得分:1)

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

无论如何,内部电子邮件几乎已经死了:随着即时消息,Twitter和短信的出现以及公司每个成员越来越多地使用外部电子邮件,您几乎完全不可能获得TLD电子邮件中没有域名。

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

答案 3 :(得分:0)

好吧,如果您在内部使用DNS,您可以随时进行DNS查找。

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

答案 4 :(得分:0)

我看过用户@ localhost表单的电子邮件地址,通常在查看邮件列表的档案以及从同一台计算机托管和发布的管理员时。所以它肯定会发生 - 而且我承认它破坏了我的解析程序!所以现在我对电子邮件地址更加灵活。

答案 5 :(得分: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;
    }
} 
?>

source 1source 2