如何更正拼写错误的电子邮件地址域?

时间:2011-08-30 06:50:30

标签: php email dns

有时用户拼错了他们的电子邮件域名,因此他们输入了错误的电子邮件地址。 例如。 abc@gmial.com而不是abc@gmail.com

以前有人想过这件事吗?任何人都可以建议如何处理这类错误吗?

10 个答案:

答案 0 :(得分:12)

  

有人可以建议如何处理这类错误吗?

您通常会将确认电子邮件发送到指定的地址,并且只有在点击该电子邮件中的链接后才能继续。

没有其他好方法可以解决这个问题 - 无法确定gmial.com是否是拼写错误,因为它是一个有效的域名。

答案 1 :(得分:6)

当问到这个问题时它不存在,但我建议MailCheck自动建议对输入的电子邮件进行更正。它被大公司成功使用。

答案 2 :(得分:3)

在我看来,接近通用案例的通用解决方案是不可能的。

话虽这么说,最常见的错字是交换两个adajcent字母。 所以你可能想检查最大的网站gmail,yahoo的角色内容以及你有什么;基于此建议如果原始版本与gmail等不匹配则使用替代拼写

  • 不要认为用户有错,建议替代方案,如果它与普通名称相比看起来可疑。另一个回复中提到了白名单。
  • 如果您需要知道可以从此地址获得回复,请使用确认邮件。 您不能假设您找到的拼写错误,这就是确认邮件的用途。
  • 让它非常突兀(ajax让人想到)。

答案 3 :(得分:2)

在我们的表格中,我们使用了多种技术。虽然糟糕的数据仍然可以通过,但机会大大减少。

首先是做一个通常可用的简单格式化正则表达式 - 只要确保它符合RFC。如果失败,最好在此时向用户提供确认表,因为他们可能会在解决此问题时为您捕获其他错误。

下一部分是检查域的TLD部分。由于可以知道所有TLD,因此使用一些正则表达式测试可以相对容易地扫描拼写错误。只需在表格中保留所有当前顶级域名的列表,并根据需要随时更新(请注意,在处理国际顶级域名时,此列表可能会变得复杂。如果您只处理美国流量,则规则很多更简单,这是你可以过滤的其他东西。例如,如果你销售的服务只在美国提供,那么在表格提交时过滤掉国际电子邮件是有意义的。我们是,所以这对我们有用)

第三是做一些像@npclaudiu建议的那样 - 扫描域名部分中的大牌邮件主机(gmail,hotmail,yahoo等)的常见拼写错误,如果检测到可能的命中,请提供确认表格用户。 (您输入someone@hptmail.com,您的意思是hotmail.com吗?)

如果您完成了这些步骤,那么您可以执行@symcbean建议的MX查找。

最后,如果所有这些都成功,则有一种方法(但我尚未对其进行测试)与远程SMTP主机通信以查看邮箱是否存在。我们即将开始测试。我在这里找到了这样的方法: http://www.webdigi.co.uk/blog/2009/how-to-check-if-an-email-address-exists-without-sending-an-email/

答案 4 :(得分:1)

有趣的是网址确实存在http://www.gmial.com 事实上,你很难知道这是一个错误还是只是一个“奇怪”的领域。看看谷歌API,因为当你在谷歌输入错误时,他们建议你“你的意思是......”

祝你好运

Arnaud

答案 5 :(得分:1)

创建常用电子邮件域名列表:

hotmail.com
gmail.com
googlemail.com
... etc

当用户输入电子邮件地址时,请获取输入地址的域名并在列表中取得Levenstein距离。如果距离为1(或最多2),则要求用户确认他们的电子邮件地址。

答案 6 :(得分:0)

如前所述,自动假设某人输错了电子邮件并不是一个好主意。更好的方法是实现一个小的javascript函数,检查电子邮件的域是否可能输入错误并提醒用户,而不是从一开始就假设它们是错误的。

给我一​​点时间来创建一个小模型。

编辑:好的,也许不到一分钟。看看http://jsbin.com/iyaxuq/8/edit并亲自了解javascript如何帮助防止常见的输入错误。尝试发送电子邮件:test@gmail.cmo,alother@yhaoo.com,loser@htomali.ocm(hotmail of hotmail)和me@aol.com。

注意:我使用了一个懒惰的正则表达式来验证电子邮件。对于真正的应用程序,不要依赖它(或者就此而言,大多数正则表达式。)

答案 7 :(得分:0)

您无法以自动更正拼写错误的电子邮件域名的方式提供此功能,因为您认为无效的名称有效。您应该期望将任何内容输入为电子邮件地址域名。

我建议,如果您要创建一个注册表单,则会向用户提供一个包含您知道的所有可能域名的下拉列表,以便他可以从中进行选择。

希望这有帮助。

答案 8 :(得分:0)

您可以在数据库中创建一个受欢迎的电子邮件域列表(gmail.com,yahoo.com,ymail.com等),并验证用户针对此列表输入的电子邮件地址,以及域与其中一个域类似,您应该显示警告并允许用户在必要时更正它,而不是自动更正它。要将输入的域与列表中的域进行比较,您可以使用类似于SQL Server中soundex函数中使用的算法,该算法根据一个单词听起来像是第二个。

修改:您可以找到more details the SOUNDEX function here

答案 9 :(得分:0)

尝试自动纠正错误数据是一种非常危险的做法。最终,只有用户才能提供正确的数据。然而,有关格式化电子邮件地址的严格规则 - 可以在javascript中运行正则表达式检查(或使用具有相同正则表达式语法的preg函数) - 但请注意,在互联网上有许多声称要解决的正则表达式的不良示例问题。

这应该是RFC2822 ADDR_SPEC验证器的相当完整的实现:

/[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/gi

然而在实践中我发现这是足够的:

/^[a-z0-9\._%+!$&*=^|~#%'`?{}/\-]+@([a-z0-9\-]+\.){1,}([a-z]{2,22})$/gi

然后,在服务器端,您可以执行MX lookup来验证所提供的域不仅符合格式要求,还作为电子邮件接收站点存在。

这并不能证明指定的邮箱存在于该网站,也不是它接受电子邮件 - 最终您需要向该地址发送电子邮件,包括点击返回链接/密码以确定该电子邮件地址是否有效

<强>更新

虽然这里的最高投票回答说,验证ADDR_SPEC的最佳方法是将令牌发送到要通过网络提交的地址,但如果数据不是来自控制邮箱的人,即使他们这样做,操作也会与主要交互分离。进一步考虑的是,今天有效的电子邮件地址可能不是明天。

使用正则表达式(以及MX查找)仍然是向用户提供即时反馈的好主意,但是对于完整的解决方案,您还需要monitor the bounces