如何验证电子邮件地址的准确性

时间:2011-02-10 22:25:31

标签: email-validation

我有一个注册用户使用的Web应用程序。这些用户拥有良好的电子邮件地址,我通过传统方式向他们发送了必须点击的电子邮件验证链接。

但是,在此应用程序中,我的用户将提供第三方的电子邮件地址,该地址不是我系统上的注册用户。然后,我的申请将向第三方发送电子邮件请求。

我正在寻找一种解决方案,可以让我捕获用户在我的网络表单上输入的任何问题或拼写错误。我正在寻找除正则表达式检查之外的东西,以便当用户仍然在网站上时,诸如“somoebody@domain.vom”之类的问题将被识别为错误,因为“vom”顶级域名无效。 / p>

由于

4 个答案:

答案 0 :(得分:5)

SMTP协议允许发送消息,众所周知。但是,协议的一部分是向SMTP服务器说HELO并要求允许向用户发送电子邮件。

通常,SMTP服务器会拒绝向不存在的用户发送邮件,并且当服务器接受该地址时,该帐户很可能存在。然后,您只需删除连接,而无需发送电子邮件。这种方法是恕我直言最合理的,并且远远超出仅使用正则表达式进行邮件地址验证。

但是,如果目的地MX主机只是一个只将邮件发送到另一台服务器的跃点,则该跃点无法知道该地址是否确实存在,因此这不是100%正面。

答案 1 :(得分:2)

与以往一样,除了尝试向其发送电子邮件之外,还有防弹方式来验证电子邮件地址的正确性。

我猜这种验证确实不是一种选择,所以你能做的最好就是使用了解当前TLD集的正则表达式。

有关详情,请参阅this question

答案 2 :(得分:1)

验证电子邮件地址存在很多问题。你可以编写一个令人难以置信的长/复杂的正则表达式,但世界可能会改变。 “vom”明天可能是有效的顶级域名。

建议只有通过向该地址发送电子邮件才能确定电子邮件地址是否有效。我建议将HELO建议作为对输入的地址是否真正有效的快速而可靠的测试。

听起来,从您的问题来看,您希望检测/避免拼写错误。也许你只是用“你的意思'.com'?”而不引人注意地通知用户。必须有一个有效TLD的白名单(可能需要调用Web服务来确保TLD列表(带有新的/删除的扩展名)。

还有关于加号是否在各种SMTP服务器上有效和/或受支持的兔子洞讨论。

答案 3 :(得分:0)

您可以使用简单的DNS查找轻松验证邮件地址的主机名/域部分。

然而,没有简单的方法来验证用户名部分,特别是考虑到很少有用户名实际名称,你可以在字典或其他东西中查找。

也没有安全的方法来查询邮件服务器的用户名。许多SMTP服务器都是简单的中继,不知道目标站点的用户列表。此外,许多邮件服务器实际上会接收无效用户的邮件,以避免垃圾邮件发送者蛮力获取其实际用户列表的可能性。

唯一“安全”的方式是发送礼貌信息要求确认,“MyService.com中的用户John B.邀请您使用他的时事通讯,您接受吗?”。如果您收到回复消息,则可以将该地址添加到每个用户的有效地址列表中,以后可以通过各种方式使用这些地址来帮助用户避免将来发生错别字。