阻止或允许带有“+”的电子邮件地址是标准做法吗?
Posted
技术标签:
【中文标题】阻止或允许带有“+”的电子邮件地址是标准做法吗?【英文标题】:Is it standard practice to block or allow email addresses with a ‘+’ in? 【发布时间】:2012-01-31 21:57:36 【问题描述】:我希望每个用户都使用唯一的电子邮件地址进行注册。但是,一些电子邮件地址(如 GMail)允许您添加一个 + 后缀,可用于在一个网站上注册多个帐户,但所有这些都转到一个电子邮件地址,例如
bob@gmail.com 转到 bob@gmail.com bob+1@gmail.com 转到 bob@gmail.com bob+2@gmail.com 转到 bob@gmail.com bob+3@gmail.com 转到 bob@gmail.com bob+4@gmail.com 转到 bob@gmail.com实际上,他们可以拥有任意数量的电子邮件地址。这是一个问题,因为我的网站将其视为 5 个单独的电子邮件地址,但 gmail 将其视为一个电子邮件地址。
我正在考虑阻止任何带有“+”的电子邮件地址,但我不想阻止任何有效的电子邮件地址。标准做法是什么?
【问题讨论】:
a) 不,它不是 b) 你也可以使用bo.b@googlemail.com
,或b.ob@googlemail.com
。
c) 无论如何,您都可以在其他地方获得数十个一次性电子邮件地址。这就是我在网站屏蔽 + 后缀时所做的事情,因为那样的话垃圾邮件很可能是故意的。
我,我使用加号来跟踪我将此地址提供给了谁。这比任何可能滥用此机制的可能性和有用得多——请不要让它变得更难(当然,很多网站已经这样做了,但我一直认为这是无能,而不是有意识的决定。)
【参考方案1】:
我认为除了不允许 + 一起使用之外,没有关于如何处理此问题的标准做法。另一方面,阻止它似乎没有 有用。如果您打算阻止的人真的需要它,那么在某些免费服务上创建一个全新的电子邮件地址不会超过几分钟。
还应注意,许多其他电子邮件提供商也提供子地址,但不使用加号,而是使用连字符(Yahoo、Runbox 等),试图阻止它只会导致对于任何只有一个带有连字符的电子邮件地址的人来说都是麻烦的。这是一场你已经输掉的战争。
此外,如果您过滤掉加号,您基本上不再符合RFC3696 标准:
确切的规则是任何 ASCII 字符,包括控制 字符,可能出现在引号中,或者出现在带引号的字符串中。 [...]
如果没有引号,local-parts 可以由以下任意组合组成 字母字符、数字或任何特殊字符
! # $ % & ' * + - / = ? ^_`。 | ~
但如果你坚持,你可以去掉加号部分。
$emails = array('bob@gmail.com','bob+1@gmail.com','bob+hello@gmail.com');
foreach ($emails as &$email)
list($identifier, $domain) = explode('@',$email);
list($name) = explode('+',$identifier);
$email = $name."@".$domain;
print_r($emails);
以上将给你
Array
(
[0] => bob@gmail.com
[1] => bob@gmail.com
[2] => bob@gmail.com
)
【讨论】:
【参考方案2】:电子邮件 ID 可能包含许多对我们来说看起来不正确的字符,我在这里找到了一个可以回答您查询的好帖子:What characters are allowed in an email address?
同样要找到唯一的电子邮件 ID,只需获取电子邮件 ID 的前半部分并删除 + 和 . chars,然后验证。
【讨论】:
我们无法保证您可以修剪本地部分中的加号(或减号、斜杠或等号,而不是任何字母)之后的任何内容。如果有人想注册多个地址,这些地址传送到同一个端点,有几十种方法可以做到这一点 - 为什么要歧视其中一种? 我不是说修剪它,只是修剪可以在电子邮件ID中使用但没有任何意义的特殊字符 你怎么知道哪些字符是重要的?将 bob+box1 转换为 bobbox1 (如果“b”不是“任何意义”,则转换为 o+ox1)有什么好处?以上是关于阻止或允许带有“+”的电子邮件地址是标准做法吗?的主要内容,如果未能解决你的问题,请参考以下文章