电子邮件地址验证

时间:2009-06-22 04:35:30

标签: php

  

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

大家好,

如何像yahoo一样验证电子邮件提供商的电子邮件地址?

情形:

asdfasdf@yahoo.com

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

先谢谢。

---- PHP规则----

9 个答案:

答案 0 :(得分:4)

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

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

^[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

答案 1 :(得分:4)

我希望以下文档有所帮助:

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

答案 2 :(得分:3)

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

答案 3 :(得分:2)

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

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

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

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

^([\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])))\.?$

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

有许多垃圾邮件/垃圾邮件(www.spam.la)允许您接收任何地址的邮件。因此,我建议不要依赖通常意义上的“有效”电子邮件。也许OpenID是一种选择?只需检查“有效”格式,您就可以使用filter_var()/FILTER_VALIDATE_EMAIL等现有功能。

答案 8 :(得分:0)

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

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