如何去重电子邮件地址

5
有没有一种可靠的方法,可以从用户输入的电子邮件地址中获取唯一的电子邮件地址?问题在于,像GMail这样的服务允许您在地址中放置一个句点,并将其删除,而其他服务则不是这种情况。
GMail:
chad.moran@gmail.com
c..hadmoran@gmail.com
c.h.a.d.m.o.r.a.n@gmail.com

所有这些都是相同的

其他服务:

chad.moran@---.com
c..hadmoran@---.com

这些是独特的。

除了专门针对GMail的特殊逻辑之外,还有更好的方法吗?


2
我有几个电子邮件帐户只是转发到我的Gmail帐户。运行自己域名的人可能会收到发送到该域的所有电子邮件。因此基本上没有确保给定的电子邮件地址不会以与您已经拥有的电子邮件相同的方式结束的方法。 - tloach
3
你为什么认为你需要这个?如果我给你一个改变过的电子邮件地址,那就恰好是我希望你使用的那个。 - Cody Gray
3
@Chad, chad.moran@gmail.comc.h.a.d.m.o.r.a.n@gmail.com 是独特的电子邮件地址。根据您的GMail设置,它们可能会进入相同的“文件夹”,但这只是巧合。然后,您有使用通配符电子邮件地址的人(abuse@chadmoran.cxinfo@chadmoran.cx等)。因此,无法通过算法确定每个用户的唯一性。而且,“专门针对GMail的逻辑”是没有意义的,因为GMail可能是您担心的最小问题(包括通配符等)。 :) 此外,@Cody所说的也是正确的。您正在做错误的事情。 - bzlm
1
这超出了问题的范围。我只是发布了我的解决方案,以帮助解释为什么我想要这样做,但似乎人们更关注解决方案而不是问题本身。 - Chad Moran
1
你没有听到我说的话。a.b.x@gmail.comabx@gmail.com不一定是相同的,如果你用任意其他域名替换'gmail.com',它们绝对不是相同的。RFC文件并未指出'.'是无关紧要的。 - bmargulies
显示剩余9条评论
2个回答

5
每个电子邮件服务器都有不同的规则,关于什么是允许的和不允许的。您指定您不想为每个客户端编写特定的逻辑,因此您必须有特定的逻辑。
您可以剥离所有点,但其他客户端可能会将带点的电子邮件地址视为不同的地址。
我强烈建议不要尝试这样做,因为它将成为维护的噩梦,特别是当其中一个电子邮件服务在一夜之间更改其策略时。此外,这种系统的好处很小,用户只会受到鼓励注册一个新的电子邮件地址,这几乎与加点实际地址相同的难度。

1
我认为你说“邮件客户端”的地方应该是“邮件服务器”。 - matt b
我想到这可能是情况,但我还是想问一下,因为似乎在SO上没有类似的受欢迎的问题。 - Chad Moran

5
这是不可能的,因为每个电子邮件服务都可以选择自己的方式来解释电子邮件地址中的“本地部分”(即@之前的部分)。chad.moran@gmail.comchadmoran@gmail.com可能会路由到同一个邮箱,但不同的提供商可能会将它们路由到不同的邮箱。
来自wikipedia
电子邮件地址的本地部分的解释取决于邮件服务器实施的惯例和政策。例如,大小写敏感性可能区分只在本地部分字符大小写上不同的邮箱,尽管这并不常见。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接