向用户发送激活电子邮件
Posted
技术标签:
【中文标题】向用户发送激活电子邮件【英文标题】:Send activation email to user 【发布时间】:2011-01-02 06:27:09 【问题描述】:如何检查电子邮件是否真的存在? 无法理解网站如何使用用户单击以验证他是电子邮件所有者的唯一链接发送邮件=/
创建一个名为 activationkey 的 2 个新列并激活并存储一些随机字符串,发送一封包含激活密钥的电子邮件,并更新与该激活链接匹配的用户激活 =1
register.php?a=activate&key=9cdfb439c7876e703e307864c9167a15
有更好的想法吗?
【问题讨论】:
【参考方案1】:我通常会发送一个包含用户 ID 和激活密钥的链接。当他们访问我的激活脚本时,如果我找到匹配项,我就会激活它们。
当他们注册时,我将生成大约 32 个大小写字母数字字符并将其设置为激活密钥。此时,您可以创建一个名为“激活”的字段,或者如果用户有激活密钥,则可以假设用户未激活。
uid |电子邮件 |钥匙 -------------------------------------------------- ---------- 001 | j.smith@mysite.com | e09141f3f5a17fed6222fc0279b9afdf -------------------------------------------------- ---------- 002 |玛丽泰勒@abc.com | -------------------------------------------------- ----------当用户访问激活脚本时,只需检查提供的密钥和提供的 ID,如果找到匹配项,从文件中的用户记录中删除密钥(或更新您的布尔“激活”字段)并打开门开了。
如果提供的电子邮件地址不存在,则不会丢失。您可以在一个月不活动后定期删除所有带键的行。
【讨论】:
不错!多谢!顺便说一句,用于生成密钥你认为 md5(uniqid());会好的?不希望 2 个用户拥有相同的密钥:P 同一个 uniqid 的 md5 仍然是相同的 - 您可以只使用前缀(可能是他们电子邮件的 md5)作为 uniqid,或者使用 uniq id 的“更多熵”标志 马丁,如果您要对电子邮件进行哈希处理,请先添加盐 +1@rick:如果你只是对电子邮件进行哈希处理,一旦有人注意到它就可以轻松绕过(这并不重要,因为任何人都可以创建任意数量的垃圾电子邮件地址)跨度> 【参考方案2】:没有简单的方法可以检查电子邮件是否真的以编程方式存在。有一些方法(ping 邮件服务器等),但没有一种方法被证明适用于每个邮件服务器的设置。强制用户通过您描述的链接激活他们的帐户是最好的方法。此外,您可能希望有某种循环脚本,例如 cron-job,它会在一段时间后删除未激活的成员(这需要您的表中的另一列,时间戳)。
这很有用,因为如果用户注册但从未激活他们的帐户并删除了电子邮件,并且您使用他们的电子邮件作为 ID(只是一个示例),他们将永远无法完成激活。或者,如果他们尝试登录,您只需将激活电子邮件重新发送到该地址即可。
只需确保您在电子邮件中指定了所有标题(回复、发件人等),这样您的电子邮件就不会被标记为垃圾邮件。
【讨论】:
这种检查电子邮件是否存在的方法并非万无一失。它不能确保电子邮件属于用户。存在一次性邮件服务,您可以在其中获得一个临时电子邮件地址。用户可能会使用其中一项服务,激活他们的帐户,然后登录系统。一段时间后,临时地址被禁用。【参考方案3】:激活密钥的一种替代方法是仅将生成的密码发送到用户电子邮件,如果用户登录他已被激活(当然,应该能够将密码更改为他喜欢的密码)。
【讨论】:
以上是关于向用户发送激活电子邮件的主要内容,如果未能解决你的问题,请参考以下文章