***域的电子邮件地址验证

Posted

技术标签:

【中文标题】***域的电子邮件地址验证【英文标题】:Email address validation of Top Level Domain 【发布时间】:2013-03-10 08:44:26 【问题描述】:

我们的 QA 提交了一个错误,指出电子邮件地址的***域不能是一个字符。

foo@bar.z

我很难研究标准。有人可以确认设置***域最小长度是否正确吗?

【问题讨论】:

电子邮件验证很难! z 和其他东西是有效的。 验证电子邮件地址的最佳方式是发送验证电子邮件。任何其他方法都不能保证地址是有效的,只是它可能是有效的,甚至是主观的。 标准是怎么说的?是否说只有一个字符的 TLD 有效? @powtac,虽然我同意对于电子邮件.z 是有效的,但对于公共电子邮件则不是。实际上,电子邮件地址“foo”也是有效的,因为默认域是 localhost,所以它相当于“foo@localhost”。但是,在 99.999% 的情况下,有人认为“这封电子邮件有效吗?”确实会丢弃所有本地或 Intranet 电子邮件地址,因为无需特殊代码即可很好地处理这些地址。 【参考方案1】:

验证电子邮件地址的规则非常复杂,因为它们在实施中可能存在错误。

与其验证电子邮件地址,不如考虑直接验证它:http://davidcel.is/blog/2012/09/06/stop-validating-email-addresses-with-regex/

您的案例的问题在于,ICANN 很有可能引入单字母***域名,并且各个 DNS 标签可以的长度为 1,实际上“ bar.z”是一个有效的电子邮件地址域名,如果从作为子域存在的 DNS 树/组织内发送(即如果邮件服务器是 smtp.mycompany.org 并且我还为 bar.z.mycompany.org 定义了一个 MX 服务器)。

【讨论】:

首先检查愚蠢的错误,然后发送验证电子邮件。我们需要对用户更友善并帮助他们,而不是让他们在无限期等待验证电子邮件中孤单。【参考方案2】:

请注意,我为此编写了一个小型 C 库调用 libtld。它可能对你有用。请注意,支持全球所有 TLD 所需的数据量非常惊人,因此我不会在 javascript 中实现此类。话虽如此,如果您可以进一步压缩数据……该库还包含一个 php 扩展,因此您可以直接使用 PHP 中的函数和结果。

【讨论】:

【参考方案3】:

到目前为止,电子邮件***域的长度应该在[2,6],但它不是一个恒定的标准,因为一切都在变化。验证电子邮件非常困难,在您尝试向其发送电子邮件之前,您无法知道一个电子邮件地址是否真的可以接收电子邮件,尽管它符合电子邮件正式标准。

【讨论】:

以上是关于***域的电子邮件地址验证的主要内容,如果未能解决你的问题,请参考以下文章

如何在 python 中验证域的 MX 记录?

将回复设置到不同域的地址会导致垃圾邮件

如何使用AWS创建基于域的电子邮件地址

python 检查您的域的电子邮件地址是Gmail还是Google Apps

怎样在windows messenger中验证我的电子邮件地址?

如何在 Laravel 中验证电子邮件地址是不是是有效的 PayPal 电子邮件地址