提问人:Matt Farina 提问时间:9/17/2008 更新时间:11/16/2009 访问量:2060
允许在电子邮件验证中user@example或user@localhost?
Allow user@example or user@localhost in email validation?
问:
我正在进行电子邮件验证检查,我们需要决定是否允许user@localhost和user@example(注意没有 .anything)被验证为有效的电子邮件地址。这适用于一个开源项目,该项目在整个 Web 和 Intranet 上都有许多用例。
RFC 2822(Internet 邮件格式标准)允许它,但 RFC 2821(SMTP 标准)说它应该失败。
思潮?
答:
这取决于您的应用。如果您认为您的几个用户会@localhost电子邮件,并且您不介意。那就去做吧。
使其成为可配置的选项,以便人们可以自己决定。就我个人而言,我会默认为失败,因为我还没有遇到过 - 内部网或公共互联网 - 我让某人使用有效的user@localhost类型地址的情况。
好吧,如果您有内部DNS工作,则始终可以进行DNS查找。
但是,如果SMTP会失败,那么我建议确保你不要包含它。
我见过表单user@localhost的电子邮件地址,通常是在查看邮件列表的存档时,管理员从同一台机器托管和发布。所以它肯定会发生 - 我承认它打破了我的解析程序!所以现在我对电子邮件地址更灵活一些。
看看这个,看起来你需要两个快速检查,详细如下:
<?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;
}
}
?>
我会禁用它。很少有组织使用内部域,而那些使用内部域的组织通常使用“acme.localhost”或“intranet.com”或其他类似的东西。DNS中正在进行某种配置,他们使用它来使其工作。
无论如何,内部电子邮件几乎已经死了:随着即时消息、Twitter 和 SMS 的出现,以及公司每个成员的外部电子邮件可用性的增加,您几乎完全有可能永远不会在电子邮件中获得无 TLD 的域名。
对于确实需要它的人,他们总是可以自己调整正则表达式,因为他们足够精明,可以设置自定义主机名来处理内部电子邮件。
评论