阻止或允许带有'+'的电子邮件地址是标准做法吗?

我希望每个用户都注册一个唯一的电子邮件地址。 但是,一些电子邮件地址,如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将其视为一个电子邮件地址。

    我想阻止任何带有'+'的电子邮件地址,但我不想阻止任何有效的电子邮件地址。 标准做法是什么?


    我不认为有关如何处理这个问题的标准做法,除了不允许+一起使用。 另一方面,防止它似乎没有用处。 如果您想要阻止的人确实需要它,在一些免费服务上创建一个全新的电子邮件地址不会超过几分钟。

    还应该注意的是,许多其他的电子邮件提供商也提供子地址,但不使用加号,而是使用连字符(雅虎,运行箱等),并试图阻止这种做法只会给任何人造成麻烦只需要一个带有连字符的电子邮件地址即可。 这是一场你已经失败的战争。

    另外,如果你滤除了加号,你基本上不再符合RFC3696标准:

    确切的规则是任何ASCII字符(包括控制字符)都可能出现引号或用引号引起来的字符串。 [...]

    如果没有引号,本地部分可能由字母,数字或任何特殊字符的任意组合组成

    ! # $ % & ' * + - / = ?  ^ _ ` . { | } ~

    但是如果你坚持的话,你可以删除加号部分。

    $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
    )
    

    电子邮件ID可以包含很多字符,这些字符对我们来说看起来不正确,我在这里找到了一个很好的线索,可以回答您的查询:电子邮件地址允许使用哪些字符?

    还要找到唯一的电子邮件ID,只需拿到电子邮件ID的前半部分,并删除+和。 字符,然后验证。

    链接地址: http://www.djcxy.com/p/92773.html

    上一篇: Is it standard practice to block or allow email addresses with a ‘+’ in?

    下一篇: Reliably blocking email addresses