我可以检查电子邮件地址是否有效?

时间:2010-05-12 15:52:46

标签: php

如何实施以下逻辑?

  • 用户使用电子邮件地址注册

  • 如果提供的电子邮件地址有效 电子邮件地址然后用户帐户获取 激活

  • 或者如果它是假电子邮件,那么用户 帐户未激活

我怀疑我能抓到 - “发送失败的回复消息”,对吧? 无论如何你会建议实施上述逻辑?

PS。无论怎样,我都必须找到一种方法,客户想要它=)

6 个答案:

答案 0 :(得分:10)

您可能不仅要确保电子邮件地址有效,还要确保它属于此特定用户。通常的方法是发送带有链接的电子邮件。用户必须单击该链接才能激活该帐户。

例如,链接可能如下所示:

http://example.com/activate?token=bc59fb46c9a0a25346889e5ab336f11c

其中token是您生成并存储在数据库中的随机字符串,链接到该帐户。然后,activate页面后面的服务器端代码将激活该帐户。如果您在一周之内没有获得此token的匹配,则可以清理帐户和激活令牌。


在回复您的评论时添加...

另一种方法是启动SMTP连接,并尝试开始发送电子邮件。这与邮件服务器中的callback verification类似。例如(<是邮件服务器所说的,>是您的脚本可能发送的内容:

< 220 example.com ESMTP Postfix
> EHLO foobar.com
< 250 OK
> MAIL FROM: noreply@foobar.com
< 250 OK
> RCPT TO: johndoe@example.com
< 550 Recipient address rejected: User unknown in local recipient table
> QUIT
< 221 Bye

这种方法有几个严重的问题,这就是为什么它没有在实践中使用。其中大部分都会导致错误接受的消息,有些会导致检查完全失败:

  • 如果您的站点位于禁止端口25(SMTP)和445(SSMTP)上的传出连接的防火墙后面,则您甚至无法连接到远程服务器。
  • 此技术不会告诉您地址是否输入错误,但会导致另一个有效地址。例如,在hotmail.com,您可以想象的任何地址都将被采用。
  • 如果邮件服务器已关闭或无法访问,则帐户创建将失败。
  • 如果邮件服务器配置为接收无效地址的邮件,则将接受任何地址。
  • 如果邮件服务器不是最终收件人,只是中继主机,则接受任何地址。
  • 如果过于频繁地探测邮件服务器,可能会将您列入黑名单。
  • 您的网站可能被恶意的人或机器人滥用来锤击邮件服务器。 (当您发送完整的验证电子邮件时也是如此。在这两种情况下都使用验证码。)

另请参阅the Postfix manuala disputed section on Wikipedia。我希望这份清单足够长,足以说服你的客户说他的问题没有很好的解决办法,他应该停止向你提出不可能的事情。

答案 1 :(得分:1)

为什么不实施验证系统。他们创建了一个帐户。向他们发送一封带有验证码的电子邮件。他们单击电子邮件中的链接,然后运行该数据库并激活该特定验证ID。

许多网站都使用这种技术,它有助于保持某种控制。

希望这有帮助

答案 2 :(得分:1)

您还可以使用PHP函数checkdnsrr($ hostname)。例如:

if (checkdnsrr("comcast.net")) 
{ 
echo 'Email valid!'
return true;
}
else
{
echo 'Email invalid!';
return false;
}

这将返回true并回显“电子邮件有效!”因为comcast.net是一个有效的ISP。此功能至少会阻止您的用户输入“johndoe@foobar.com”。

答案 3 :(得分:0)

这是一项将验证电子邮件地址的服务,不确定这是否是您感兴趣的预期路线。 Service

答案 4 :(得分:0)

查看 Regular Expressions ,这是一种可以验证电子邮件格式的方式,以确保它是有效的电子邮件结构(即包含“@”,具有顶级域名,域名等。)

这只会确保电子邮件有效,但像fakeMan@FakeLand.com这样的假邮件仍会通过。为确保电子邮件真实,您需要通过邮件服务器发送电子邮件,并检查是否有退回。这个过程可能需要一段时间,因为你必须等待电子邮件服务器以反弹回应,这很难预测需要多长时间。如果您希望用户等待几天,那就没关系。

标准是使用正则表达式验证电子邮件以确保它是正确的格式。然后你要做的是将验证密钥发送到用户的电子邮件。他们需要有效的电子邮件才能获得密钥,以完成注册过程。

当然,仍然有用户使用临时电子邮件注册网站。这是一个存在24小时左右的电子邮件,足以让他们获得验证密钥......没有真正的方法来绕过这样做的用户,除了将所有这些服务列入黑名单(并且还有很多。)< / p>

答案 5 :(得分:0)

这是真正的电子邮件语法正则表达式:http://ex-parrot.com/~pdw/Mail-RFC822-Address.html

你知道,这不是一项微不足道的工作。