如何在纯文本电子邮件中传递长URL?

时间:2012-02-20 16:53:20

标签: email-spec

我已将此帐户创建电子邮件发送给尝试创建帐户的任何人,因为我需要验证他们是否是他们所说的人。

但是,我的问题是,他们收到我的电子邮件时需要点击的网址太长,而且有些电子邮件客户端处理得不好,有时也会截断网址,从而导致点击后网址无效。

因为URL包含域名,散列电子邮件和长激活码。它看起来像这样。

http://domain.com/activation?email=75a5867d3df134bededbaf24ff17624d&key=8fecb20817b3847419bb3de39a609afe

虽然有些电子邮件客户端可以使用,但有些不是......而且我不想使用HTML电子邮件,而是坚持使用普通/文本电子邮件。我也听到了使用URL缩短器的可怕故事,所以我不确定是否应该使用它们......

对此领域的任何见解表示赞赏!

1 个答案:

答案 0 :(得分:0)

我绝对同意Jason:缩短你的网址。

想想你真正需要什么。

  • 电子邮件地址很可能已经在数据库中,所以你可以参考一个短ID(比方说最多7个数字)。您的签名可以非常简单,如substring (base64_url(md5(email+salt)), 0, 5)。 5个base64个字符是64 ^ 5 =大约10亿个可能性。这可能足够安全(如果有人使用错误的电子邮件地址注册,那么真正的损害是什么)。因此,您的网址为http://domain.com/activation?email=1234&key=aD5Y_http://domain.com/activation?e=1234&k=aD5Y_甚至是http://domain.com/activation?e=1234aD5Y_。在最后一种格式中,您知道最后5个字符是键,所以其余的是id。请注意,代码示例假定md5以8位字符串格式(而不是十六进制字符串格式)返回,base64_url使用url safe base64 method。此外,a salt上的一些背景信息。
  • 如果您的电子邮件地址有长ID或者需要在网址中进行编码,或者上述内容还不够短,请考虑使用更短的表单。基本上这将导致您自己的网址缩短。在将链接插入电子邮件之前,生成一些随机的5个字符串。将此字符串作为键插入到memcached(或数据库)中,并将其作为原始URL的值。然后您的网址可能是http://domain.com/redirect?key=rT-tW。当您在应用程序中看到此内容时,只需从数据库/ memcached中检索原始URL并在那里重定向。

请确保您的系统对以下内容具有强大功能:

  • 有人输入电子邮件地址(他们的真实电子邮件),您发送链接
  • 在点击链接之前,该人将其电子邮件地址更改为网站上的虚假内容,您向新(假)电子邮件地址发送新电子邮件
  • 他们现在点击第一封电子邮件中的链接,您的网站以第二(假)形式确认其电子邮件地址。

执行此操作的一种方法是确保在密钥生成中使用电子邮件地址本身(而不仅仅是用户ID),如上所述。