我该如何实现以下逻辑?
用户使用电子邮件地址注册
如果提供的电子邮件地址是有效的电子邮件地址则用户帐户被激活
或者如果是假电子邮件,则不会激活用户帐户
我怀疑我能抓住 - "发送失败的回复消息",对吗?无论如何你会建议实施上述逻辑?
PS.无论如何,我都必须找到一种方法,客户想要它=)
您可能希望不仅确保电子邮件地址有效,而且还确保它属于此特定用户.通常的方法是发送带有链接的电子邮件.用户必须单击该链接才能激活该帐户.
例如,链接可能如下所示:
http://example.com/activate?token=bc59fb46c9a0a25346889e5ab336f11c
其中token
是您生成并存储在数据库中的随机字符串,链接到该帐户.activate
然后页面后面的服务器端代码将激活该帐户.如果您token
在一周之内没有获得此命中,则可以清理帐户和激活令牌.
添加回复您的评论...
另一种方法是启动SMTP连接,并尝试开始发送电子邮件.这类似于邮件服务器之间的回调验证.例如(<
邮件服务器说的>
是您的脚本可能发送的内容):
< 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)上的传出连接的防火墙后面,则甚至无法连接到远程服务器.
此技术不会告诉您地址是否输入错误,但会导致另一个有效地址.例如,at hotmail.com
,几乎任何你能想象的地址都将被采用.
如果邮件服务器已关闭或无法访问,则帐户创建将失败.
如果邮件服务器配置为接收无效地址的邮件,则将接受任何地址.
如果邮件服务器不是最终收件人,而只是中继主机,则将接受任何地址.
如果过于频繁地探测邮件服务器,则可能会将您列入黑名单.
您的站点可能被恶意的人或机器人滥用以锤击邮件服务器.(当您发送完整的验证电子邮件时也是如此.在这两种情况下都使用验证码.)
另请参阅Postfix手册和维基百科上有争议的部分.我希望这份清单足以说服你的客户说他的问题没有很好的解决办法,并且他应该停止向你提出不可能的问题.