【问题标题】:Validating unique email ignoring gmail or other services aliases验证忽略 gmail 或其他服务别名的唯一电子邮件
【发布时间】:2015-08-26 21:24:32
【问题描述】:

这种情况是我只想接受来自忽略 gmail 别名的人的唯一电子邮件地址(如果有任何其他服务做类似的事情)

这样做的原因是我们提供了数量有限的折扣代码,而且公平地说,我们不希望有人只使用一个电子邮件地址来索取大量折扣。

据我了解:

  • 如果是 gmail.comgooglemail.com,则删除 + 和后面的任何内容,因为那是别名。
  • 如果是gmail,则删除username 中的所有点,因为它们会被忽略。 john.smith@johnsmith@ 相同
  • 不要只是使 + 符号无效,因为它对电子邮件地址有效。

是否有任何其他服务我需要注意,允许一个人将他们的电子邮件地址别名为多种形式以及我的方案的任何其他注意事项。

更新我确实有一个数据库来存储包含电子邮件地址和声明代码的提交。

我也明白,很难完全阻止人们声称拥有多个代码。禁止别名只是为了减少它。

干杯。

【问题讨论】:

  • 您必须为此不断更新您的数据库。有大量的服务,而且还有针对域的包罗万象的电子邮件地址,可以将任意数量的电子邮件地址转发到一个帐户!
  • 嗯,总有一种或另一种作弊方式!但是您需要有一个已知可能性的数据库并经常更新它。

标签: php email-validation


【解决方案1】:

在这种情况下,您可以使用正则表达式。使用此代码,您可以将电子邮件数组转换为别名数组(您可以为每个邮件服务自定义符号模式):

代码:

$mails = ['johnsmith@gmail.com', 'johnsmith@yahoo.com', 'jo.hn.sm.ith@gmail.com'];
$valid_mails = [];
$pattern = "/^(?P<name>[A-Za-z0-9._+\-\']+)@(?P<mail>[A-Za-z0-9.\-]+)\.[A-Za-z]{2,}$/";
$symbol_pattern = ['gmail'=>'/(\.|\+|-)/','yahoo'=>'/(\.)/'];
foreach ($mails as $key=>$mail) {
    $valid_mails[$key] = preg_replace_callback($pattern, function($match){
        global $symbol_pattern;
        return preg_replace($symbol_pattern[$match['mail']], '', $match['name']);
    }, $mail);
}
var_dump($valid_mails);

输出

array(3) { [0]=> string(9) "johnsmith" [1]=> string(9) "johnsmith" [2]=> string(9) "johnsmith" }

【讨论】:

  • 那些不是真正的别名 - gmail 只是忽略点。更重要的是大多数服务都支持的地址扩展(通常使用+) - 所以johnsmith+bar@gmail.comjohnsmith+foo@gmail.com 传送到同一个地方。您可以在不预先定义任何内容的情况下编造这些内容。
【解决方案2】:

编写代码以忽略单个服务(如 Gmail)中的少数已知别名格式并不是什么大问题。然而,试图阻止一个人仅根据电子邮件地址申请多个折扣是一项不可能完成的任务。

有很多不同的方法可以创建新的电子邮件地址和别名。例如,有一些服务可以让您创建一次性电子邮件,通过这些服务您可以拥有任意数量的不同地址。此外,只需几美元,您就可以使用自己的域获得自己的电子邮件主机,您可以在其中注册一堆地址和/或一个包罗万象的地址。

要阻止任何人下定决心索取您的大量折扣,将需要大量资源。并非没有其他识别方法,除了电子邮件地址。

我会考虑添加其他验证方法。根据您的操作,可能是链接到 Facebook,甚至要求提供信用卡详细信息以进行验证。

【讨论】:

  • 明白。我真的只是在添加路障之后才更加努力地要求倍数。我知道很难完全停止。 Facebook auth 可能是我可以建议的一个合适的附加选项,信用卡信息对于这种情况可能太多了。干杯。
猜你喜欢
  • 1970-01-01
  • 2021-08-22
  • 1970-01-01
  • 2016-12-09
  • 1970-01-01
  • 1970-01-01
  • 2014-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多