向用户发送激活电子邮件

6

如何检查电子邮件是否存在?不理解网站如何发送带有唯一链接的邮件,用户点击以验证他是电子邮件所有者。

创建两个名为“activationkey”和“activated”的新列,并存储一些随机字符串,发送带有激活密钥的电子邮件,并更新与该激活链接匹配的用户已激活=1。

register.php?a=activate&key=9cdfb439c7876e703e307864c9167a15

有更好的想法吗?
3个回答

16

一般我发送一个包含用户ID和激活密钥的链接。当他们访问我的激活脚本时,如果找到匹配项,我会激活他们。

注册时,我会生成32个字符(大小写字母数字组成)并将其设置为激活密钥。此时,您可以创建一个名为“已激活”的字段,或者如果用户具有激活密钥,则可以假定用户未激活。

uid |        email       | key
------------------------------------------------------------
001 | j.smith@mysite.com | e09141f3f5a17fed6222fc0279b9afdf
------------------------------------------------------------
002 | mary.tyler@abc.com | 
------------------------------------------------------------

当用户访问激活脚本时,只需检查提供的ID和激活密钥是否匹配,如果找到匹配项,则从文件中删除用户记录中的密钥(或更新您的布尔“已激活”字段),然后开启用户权限。

如果提供的电子邮件地址不存在,则无损失。您可以定期删除所有长期不活动的密钥行。


不错!非常感谢!顺便问一下,你觉得用md5(uniqid())生成密钥可以吗?我不想让两个用户拥有相同的密钥 :P - Martin
1
相同唯一ID的MD5仍将是相同的 - 您可以仅使用前缀(可能是他们电子邮件的MD5)作为唯一ID,或使用uniq_id的“更多熵”标志。 - eCaroth
3
马丁,如果你要对电子邮件进行哈希处理,那么请先加盐。 - rick
+1@rick:如果你只是对电子邮件进行哈希处理,一旦有人注意到,它就很容易被绕过(虽然这并不重要,因为任何人都可以创建任意数量的垃圾电子邮件地址)。 - o0'.

2

除了激活码,另一种选择是将生成的密码发送到用户电子邮件中,如果用户登录,则被激活(当然,应该能够更改为自己喜欢的密码)。


0

编程方面没有简单的方法来检查电子邮件是否真实存在。有一些方法(如ping邮件服务器等),但没有一种被证明可以适用于每个邮件服务器设置的方法。强制用户通过像您描述的链接激活他们的帐户是最好的方法。此外,您可能希望拥有某种定期脚本,例如cron-job,在一定时间后删除未激活的成员(这将需要表中的另一列,即时间戳)。

这很有用,因为如果用户注册但从未激活其帐户并删除了电子邮件,并且您正在使用其电子邮件作为ID(仅作为示例),则他们将永远无法完成激活。或者,如果他们尝试登录,您可以简单地重新发送激活电子邮件到该地址。

只需确保在电子邮件中指定所有标题(回复,发件人等),以便您的电子邮件不会被标记为垃圾邮件。


这种检查电子邮件是否存在的方法并不是绝对可靠的。它不能确保该电子邮件地址属于用户。现在有一些一次性邮件服务,可以提供临时的电子邮件地址。用户可能会使用其中一个服务来激活他们的账户并登录系统。过一段时间后,这个临时地址就会被禁用。 - Inf.S

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接