【问题标题】:Is an email address valid that passes validation but bounces?通过验证但被退回的电子邮件地址是否有效?
【发布时间】:2011-07-22 02:18:19
【问题描述】:

我使用 Zend_Validate_EmailAddress 来验证我的电子邮件程序的电子邮件地址。它根据 RFC2822 进行验证 - http://framework.zend.com/manual/en/zend.validate.set.html

我的问题是这些电子邮件在通过验证后是否有效?

test@test.co。 测试@test.co.za。等等注意最后的句号。

我发现验证器传递了这些明显错误的电子邮件地址。我不完全明白为什么这应该通过任何人都可以帮助我吗?

问候

【问题讨论】:

  • 包含根区域在技术上是正确的,但并不是所有的邮件服务器都喜欢它们。例如,Exchange 总是对此有问题。

标签: php zend-framework email-validation rfc2822


【解决方案1】:

电子邮件地址并非“明显错误”; DNS 名称允许以结尾 . 结尾,以表明它是绝对的而不是相对的。

[编辑补充:以上内容可能具有误导性。在电子邮件地址中,至少对于 SMTP,主机名总是被解释为完全限定的——即“绝对”。因此,在电子邮件地址的主机名部分中永远不需要 结尾.。但是,结尾的 . 仍然是有效的主机名语法。]

【讨论】:

  • 好吧,我同意你的看法,事实是验证者前一天把它们扔了出去,第二天又通过了。
  • 我不知道它为什么会这样做,除非你打开了mx 检查(它实际上与外部服务器对话以尝试发现有问题的主机是否会接受电子邮件;当然,这可能会因您完全无法控制的原因而改变)。
  • 有相对地址或绝对地址是什么意思?
  • DNS 是分层的,类似于文件系统目录结构。尾随 . 就像 Unix 路径名中的前导 / 一样,表示应该按原样使用名称。 (实际术语是“完全限定的域名”或 FQDN。)如果没有它,根据您的 DNS 设置,名称可能会被相对解释;所以如果你在机器foo.bar.com 上,那么名称baz 可能会被解释为baz.bar.com。 (或者,原则上,作为baz.com——但没有人以这种方式设置他们的DNS——或者在顶层作为baz——但没有这样的主机。)
【解决方案2】:

以下是rfc2822推荐的正则表达式:

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

这个正则表达式很耗时,因此我相信 Zend 使用了一个更简单的正则表达式,它无意中忽略了结尾的句号。

有用的链接:
http://www.regular-expressions.info/email.html
http://regexpal.com/

【讨论】:

  • 谢谢。感谢您的宝贵时间
猜你喜欢
  • 2021-07-03
  • 2015-10-21
  • 2013-01-05
  • 1970-01-01
  • 2013-11-20
  • 1970-01-01
  • 2012-10-30
  • 2012-04-08
  • 2018-03-07
相关资源
最近更新 更多