在电子邮件验证中允许user @ example或者user @ localhost?
我正在进行电子邮件验证检查,我们需要确定是否允许将user @ localhost和user @ example(注意:.anything)验证为有效的电子邮件地址。这是一个开放源代码项目,在大型Web和Intranet上都有许多用例。
RFC 2822(Internet邮件格式标准)允许它,但是RFC 2821(SMTP标准)说它应该失败。
有什么想法吗?
解决方案
回答
这取决于应用程序。如果我们认为几个用户会有一封@localhost电子邮件,那么我们不介意。然后去吧。
回答
使其成为可配置的选项,以便人们可以自己决定。我个人会默认将其设置为失败,因为我还没有遇到一个案例Intranet或者公共Internet,在该案例中我已经有人使用了有效的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; } } ?>
(来源1,来源2)
回答
我会禁用它。很少有组织使用内部域,而通常使用" acme.localhost"或者" intranet.com"或者其他类似名称的组织。他们使用DNS进行某种配置以使其起作用。
无论如何,内部电子邮件几乎已经死了:随着即时消息,Twitter和SMS的出现,以及公司每个成员的外部电子邮件可用性的日益提高,几乎完全有可能永远不会获得无TLD域名在电子邮件中。
对于确实需要它的人,他们总是可以自己调整正则表达式,因为他们足够聪明,可以设置自定义主机名来处理内部电子邮件。