【问题标题】: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 电子邮件地址,因为无需特殊代码即可很好地处理这些地址。

标签: javascript email email-validation tld


【解决方案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],但它不是一个恒定的标准,因为一切都在变化。验证电子邮件非常困难,在您尝试向其发送电子邮件之前,您无法知道一个电子邮件地址是否真的可以接收电子邮件,尽管它符合电子邮件正式标准。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-20
      • 2011-06-14
      • 2012-03-07
      • 2014-06-12
      • 1970-01-01
      • 2014-03-19
      • 2011-07-05
      • 2018-03-13
      相关资源
      最近更新 更多