【问题标题】:email address validation [duplicate]电子邮件地址验证 [重复]
【发布时间】:2010-11-04 18:11:24
【问题描述】:

可能的重复:
Is there a php library for email address validation?
How to check if an email address exists without sending an email?

大家好,

我怎样才能像雅虎一样向电子邮件提供商验证电子邮件地址?

场景:

asdfasdf@yahoo.com

我如何向 yahoo.com 验证上述电子邮件是否有效?

提前致谢。

---- PHP 规则----

【问题讨论】:

  • 我认为这个问题的措辞有些误导​​。请注意,这是为了检查邮箱地址是否真实存在,而不仅仅是邮箱地址的格式。
  • 是的,标题应该类似于“使用提供商或域或来源验证电子邮件的真实性”
  • 对不起,我不知道那个词是什么...
  • 以前有人问过这个问题:stackoverflow.com/questions/565504/…

标签: php


【解决方案1】:

验证电子邮件的唯一“正确”方法是实际尝试向该地址发送电子邮件,但大多数情况下正则表达式可以解决问题。

为了使问题复杂化,您可能只需要像这样的简单验证

^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}$

或者像这样更复杂的一个

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum)\b

有一篇关于电子邮件验证的不错的文章here

【讨论】:

  • 问题不在于电子邮件的格式。如果电子邮件地址在电子邮件提供商(如 yahoo.com)上有效,则验证来自电子邮件地址。
  • 没关系...顺便感谢您的回复----PHP规则----
【解决方案2】:

与服务器建立 SMTP 连接,并进行“发件人验证”查找:

telnet <Yahoo MX> 25
helo here.com
mail from: here@there.com
rcpt to: asdfasdf@yahoo.com
data

您将获得继续传输的代码,或者收到无效的收件人消息。

【讨论】:

  • 我想您会发现这通常不起作用,因为垃圾邮件发送者会使用它来验证电子邮件地址。
  • 实际上这很常见 - 很多邮件服务器(如 Exim) - 在接受新邮件之前使用它来验证发件人。我运行一个大型邮件平台,每条消息都以这种方式进行验证。
  • 如果您这样做,请不要忘记按照 SMTP 标准的要求在电子邮件地址周围使用尖括号:mail from:
  • cletus 是对的,大多数主要的邮件提供商(包括 yahoo、iirc)都会响应这样的任何请求,无论该电子邮件是否存在于该域下,总是得到肯定的结果或总是得到否定的结果.唯一可靠的方法是发送确认电子邮件。
  • 赞成,因为到目前为止看来,发件人地址验证是(唯一!)正确答案。但是,我建议尝试找到一个库来执行 SAV,或者至少执行 SMTP。像上面这样的简单连接在很多情况下都会失败:你应该在启动“MAIL FROM”之前等待EHLO响应,如果你继续提交数据,很多邮件服务器会断开连接; “here.com”应该是您主机的正确 FQDN。不需要“DATA”——如果 RCPT TO 成功,地址就可以了。您应该缓存响应以避免服务器崩溃。
【解决方案3】:

希望以下文档对您有所帮助:

Validate an E-Mail Address with PHP, the Right Way

【讨论】:

  • 感谢您的链接先生... ---- PHP 规则 ----
  • 当心这篇文章!阅读 cmets!
【解决方案4】:

通过 SOAP 调用、GET 或 POST 使用此免费 Web 服务。你需要做的就是给它一个电子邮件地址,它会返回一个布尔值,表示它是否是一个实际的、可交付的电子邮件地址:

http://www.webservicex.net/ValidateEmail.asmx?op=IsValidEmail

【讨论】:

  • 哦,太好了,不道德的垃圾邮件发送者获取有效电子邮件地址的另一种方式。
  • 我刚刚测试了该服务,它似乎可以工作。
【解决方案5】:

查找该电子邮件地址的 MX 记录。

【讨论】:

    【解决方案6】:

    那里有许多垃圾邮件/垃圾邮件 (www.spam.la),可让您接收到任何地址的邮件。因此,我建议不要依赖通常意义上的“有效”电子邮件。也许OpenID 是一个选项?为了检查“有效”格式,您可以利用现有功能,如filter_var()/FILTER_VALIDATE_EMAIL

    【讨论】:

      【解决方案7】:

      以下正则表达式匹配电子邮件地址:

      ^([\w-\.]+)@((\[[0–9]{1,3}\.[0–9]{1,3}\.[0–9]{1,3}\.)|(([\w-]+\.)+))
      ([a-zA-Z]{2,4}|[0–9]{1,3})(\]?)$
      

      rashmipandit@gmail.com - 有效

      rashmi.pandit@gmail.com - 有效

      rashmi_pandit@gmail.com - 有效

      rashmi.pandit@gmail - 无效

      rashmi+pandit@gmail.com - 无效

      如果您想按照 RFC 指南进行更复杂的操作,可以使用这个:

      ^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$
      

      【讨论】:

      • 这将拒绝有效的电子邮件地址,包括那些带有加号和下划线字符的地址。
      • _ 是允许的,第二种模式是根据 RFC 指南。
      【解决方案8】:

      您可以向该地址发送电子邮件,并让用户通过单击链接进行验证。

      【讨论】:

      • 有时显而易见的解决方案是最好的 :) 正如在其他答案中所讨论的,任何其他(自动)方式都可能会立即被垃圾邮件发送者滥用,因此不会起作用。
      【解决方案9】:

      上面的大多数答案都着眼于电子邮件地址的正则表达式检查。要实际查看电子邮件地址是否有效,您需要连接到 SMTP 服务器并向其发送命令。 All details and PHP code is available here

      谨慎使用,如果您发送大量请求,雅虎服务器可能会阻止您。此外,强烈建议将其与其他人描述的正则表达式一起使用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-03
        • 2013-03-25
        • 2014-11-29
        • 2011-12-11
        • 2018-05-30
        • 2011-05-28
        • 2016-04-25
        • 2014-06-12
        相关资源
        最近更新 更多