顶级域名的电子邮件地址验证

8
我们的QA提交了一个缺陷报告,指出电子邮件地址的顶级域名不能为一个字符。
foo@bar.z

我在研究标准时遇到了困难。请问是否将顶级域名的最小长度设置为正确操作?


1
电子邮件验证很难!z和其他字符是有效的。 - powtac
验证电子邮件地址的最佳方法是发送验证电子邮件。任何其他方法都不能保证该地址有效,仅仅是可能有效,甚至这也是主观的。 - Lee Taylor
标准规定了什么?它是否说一个字符的顶级域名是有效的? - hrishikeshp19
2
@powtac,尽管我同意对于电子邮件来说“.z”是有效的,但对于公共电子邮件来说则不是。实际上,“foo”电子邮件地址也是有效的,因为默认域名是localhost,所以它等同于“foo@localhost”。然而,99.999%的情况下,认为“这个电子邮件地址是否有效?”的人会丢弃所有本地或内部网络电子邮件地址,因为这些地址已经被特殊代码很好地处理了。 - Alexis Wilke
3个回答

4
验证电子邮件地址的规则非常复杂,其实现可能存在漏洞。与其验证电子邮件地址,不如直接验证它:http://davidcel.is/blog/2012/09/06/stop-validating-email-addresses-with-regex/ 问题在于,ICANN 可能会引入单字母顶级域名,并且单个 DNS 标签的长度可以为 1。事实上,如果从具有该子域作为子域存在的 DNS 树/组织内发送,则 "bar.z" 是一个有效的电子邮件地址域名(即如果邮件服务器是 smtp.mycompany.org,我还定义了一个 MX 服务器用于 bar.z.mycompany.org)。

首先检查愚蠢的错误,然后发送验证电子邮件。我们需要更加友善地对待用户并帮助他们,而不是让他们孤独地等待无限期的验证电子邮件。 - Alexo Po.

1

到目前为止,电子邮件顶级域名的长度应该在[2,6]范围内,但这不是一个恒定的标准,因为一切都在变化。验证电子邮件非常困难,你无法知道一个电子邮件地址是否实际上可以接收电子邮件,除非你尝试向其发送电子邮件,即使它符合电子邮件正式标准。


1

请注意,我为此编写了一个名为libtld的小型C库。它可能对您有用。需要注意的是,支持全球所有TLD所需的数据量非常惊人,因此我不建议在Javascript中实现此类功能。话虽如此,如果您能将数据压缩更多......该库还包括一个PHP扩展,因此您可以直接从PHP使用函数和结果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接