代码之家  ›  专栏  ›  技术社区  ›  Matt

如何在电子邮件中添加一键取消订阅功能?

  •  20
  • Matt  · 技术社区  · 15 年前

    我想在我们的电子邮件通讯中自定义“取消订阅”链接,这样他们只需单击一下就可以删除收件人。现在,他们只需指向一个通用页面,用户必须输入他们的电子邮件地址,然后选择他们想要取消订阅的新闻稿。

    这看起来应该非常简单,即只将电子邮件地址和时事通讯ID作为URL参数。但是,当我从订阅的列表中查看示例时,许多列表中没有包含可识别的地址,而且大多数列表中的参数似乎使用了类似于guid和/或哈希值的值。从这一点上,我猜我应该散列或者编码一些信息,以防止恶意滥用退订表单。

    所以我的问题实际上是关于最佳实践,而不是重新设计车轮。有没有一种标准的方法来处理这种功能?更具体地说,是否有理由不将收件人的电子邮件地址作为URL的一部分?这看起来很简单,让人觉得我忽略了一些东西。

    7 回复  |  直到 6 年前
        1
  •  27
  •   bdonlan    15 年前

    您可以像这样对URL进行编码:

    http://yourserver.com/unsubscribe/<encoded-email>/<expiration>/<signature>
    

    在哪里? <signature> 是不是有点像 HMAC(secretkey, "<encoded-email>/<expiration>") .编码的电子邮件可以只是电子邮件的URL编码,也可以是电子邮件的实际加密版本(aes+cbc+base64或类似版本)。但是,使用完全加密似乎没有什么用处——因为接收到加密的人无论如何都有自己的电子邮件地址。

    此签名方案的优点是不需要任何数据库存储,同时可以防止恶意尝试取消订阅某人。

    或者(或者除上述之外),您可以发送确认邮件以确认用户的意图。这样可以避免用户转发电子邮件时出现的问题。

        2
  •  3
  •   Harper Shelby damiankolasa    15 年前

    如果您的邮件列表软件使用的是老式的最佳做法,那么应该有一个“取消订阅”的电子邮件地址-从您想要取消订阅的地址(可能有固定的主题行)发送电子邮件到该地址通常会起到关键作用(同时发送确认电子邮件)。在这种情况下,添加一个格式正确的“mailto”链接应该可以做到这一点。

        3
  •  2
  •   user83632    15 年前

    查询中没有纯文本电子邮件地址的两个原因是,您不希望恶意用户从邮件列表中取消订阅您的客户。

    第二个可能只会影响发送数百万电子邮件的公司,是让垃圾邮件发送者更难“嗅探”真正的电子邮件地址。

        4
  •  1
  •   ZZ Coder    15 年前

    在通讯中嵌入电子邮件地址是不安全的。对你的不太确定,但许多新闻稿最后都被放在了网上的一些档案中。有专门为从邮件列表存档中获取地址而设计的垃圾邮件机器人程序。

    电子邮件是一种更安全的技术。为取消订阅设置邮件帐户,并从邮件头中获取电子邮件地址。如果您使用任何邮件列表软件,它应该已经处理了这个问题。

        5
  •  0
  •   mrjimoy_05    12 年前

    我在Web应用程序中使用了一种简单的方法,但我不确定它是否有效和安全,足以满足其他Web应用程序的目的。

    在我的应用程序中,当用户单击“取消订阅”链接时,我将它们转发到服务器上的一个页面,其中包含一个查询字符串,该字符串是用户电子邮件地址和我的 DB (最好加密)。

    然后在我的页面的页面加载功能中,首先 decrypt 这个 Email address ,然后我检查电子邮件地址是否存在于我的数据库中,然后如果答案是真的,我检查 ID 以及 电子邮件地址 是相关的,最后我根据其他标准删除了用户。

    我认为如果没有任何额外的数据输入到 分贝 .

    现在,我正在寻找一种方法来查明点击链接的人是否是我发送电子邮件的第一手人,或者电子邮件是否已转发给他/她。这样,除了真正的用户之外,没有人可以(至少很容易)取消订阅他/她!

    [在最终确定取消订阅流程之前询问安全问题是我迄今为止一直在考虑的一件事]

        6
  •  0
  •   E. Villiger    6 年前

    我分配了一个唯一的32字符标识符字符串(使用mysql: MD5(UUID()) )到每个电子邮件地址,并且只在取消订阅链接中提交该标识符。

        7
  •  -6
  •   Jim    15 年前

    我给我发送的每封电子邮件都提供一个ID,然后在他们单击“取消订阅”时查找电子邮件ID。

    http://www.foo.com/unsubscribe.asp?ID=1234

    然后取消订阅我发送1234的电子邮件地址。