亚马逊AWS官方博客
使用 Amazon SES 列表功能实现邮件的取消订阅
邮件营销是一种广泛使用的在线营销方式,但同时也存在一些问题和挑战,为了保护用户的权益,减少垃圾邮件的困扰,主流邮件服务提供商如 Gmail 和 Yahoo Mail 制定了一系列发送者要求,其中包括提供一键取消订阅功能。
一键取消订阅(One-Click Unsubscribe)是指在邮件正文或标题中提供一个明确的链接,允许收件人快速退订该邮件列表或主题,无需进行复杂的操作。这一要求的目的是提高用户体验,减少投诉率,从而维护良好的发送声誉。
该要求的理论依据来自于 RFC(Request for Comments)文档,这是由互联网工程任务组(IETF)发布的一系列描述互联网相关技术标准的文档。其中:
RFC 2369 定义了”List-Unsubscribe”标头字段,用于指定退订邮件列表的方式,如邮件地址或网页链接。
RFC 8058 对此进行了扩展,引入了”List-Unsubscribe-Post”标头字段,支持通过 HTTP POST 请求进行退订操作。
通过在邮件中包含这些标头字段,发送者可以为收件人提供方便的一键退订渠道,从而降低投诉风险,提高发送声誉。
Amazon Simple Email Service (Amazon SES) 利用原生的列表和订阅管理功能来帮助用户遵守 Gmail 和 Yahoo Mail 的发送要求。利用 Amazon SES 发送邮件时,在 X-SES-LIST-MANAGEMENT-OPTIONS 的标头中指定 contactListName 和 topicName,Amazon SES 将自动为该邮件增加取消订阅的链接。当用户通过该链接取消订阅后,Amazon SES 将不再向该联系人发送对应主题的邮件。
使用流程
创建列表和主题
在邮件的 X-SES-LIST-MANAGEMENT-OPTIONS 标头中指定 contactListName 和 topicName,需要通过 Amazon SES 的列表管理功能创建列表和主题。
执行以下命令创建 list-demo 的联系人列表及两个测试使用的主题。在这里,我们创建两个用于示例的 topic1 和 topic2 主题。
注意:每个账号在一个区域只能创建一个联系人列表,每个列表最多可以包含 20 个主题。
执行以下命令确认列表及主题创建成功。
为发送邮件增加标头
在发送邮件时,通过添加 X-SES-LIST-MANAGEMENT-OPTIONS 标头,指定为上一步创建的 ContactListName 及 TopicName。以下为 java 以 SMTP 协议发送邮件时的部分代码示例。
在邮件的正文内容中,通过插入 {{amazonSESUnsubscribeUrl}} 占位符的方式,可以让 Amazon SES 将占位符代替为相应的取消订阅链接。在接收到邮件后,您可以查看到邮件正文中具有相关的链接。
最终用户取消订阅样例
通过访问邮件的链接,可以看到当前收件人当前订阅的主题。取消勾选主题 topic1 并点击 Update 按钮进行取消 topic1 的订阅进行测试。
通过以下命令,查看相应收件人的订阅状态,在输出的内容中,可以查看到相应的主题 topic1 目前处于取消订阅的状态。
注意:默认情况下,只有在发送了邮件给相关收件人以后,才可以通过命令查看收件人的订阅状态。您也可以通过 createImportJob 的方式,将现有联系人导入到 Amazon SES。
当您再次发送主题为 topic1 的邮件给取消该主题的收件人时,该收件人将不再接收到该类邮件,而发送主题 topic2 时,收件人仍然可以正常接收邮件。
最后,清理该次测试所使用的联系人列表,您可以通过以下命令删除创建的列表。
总结
在这篇文章中,您使用 Amazon SES 的列表管理及订阅管理的功能,简单地通过在发送邮件时增加 X-SES-LIST-MANAGEMENT-OPTIONS 标头及插入 {{amazonSESUnsubscribeUrl}} 占位符的方式,实现了收件人的取消订阅功能,这也让您的邮件发送遵守了 Gmail 和Yahoo Mail 对于批量发送邮件的要求,提高了用户的体验。
参考链接
- 使用列表管理- Amazon Simple Email Service
- 使用订阅管理 – Amazon Simple Email Service
- Using one-click unsubscribe with Amazon SES