邮件列表收件人可以取消订阅我的 Amazon SNS 主题电子邮件列表上的每个人。如何阻止?

上次更新时间:2019 年 4 月 17 日

我已订阅邮件列表的电子邮件地址到我的 Amazon Simple Notification Service (Amazon SNS) 主题。列表中的一位成员选择了消息中的取消订阅链接,取消了邮件列表电子邮件地址以及列表上的每一个人的订阅。我如何避免这种情况?

简短描述

当您通过电子邮件订阅者向 Amazon SNS 主题发布消息时,这些订阅者接收到的电子邮件消息中包含取消主题订阅的链接。(也就是说,“如果您希望停止接收来自该主题的通知,请单击或访问下面的链接取消订阅。”)

当有人使用自己的电子邮件地址订阅了某个主题然后又选择取消订阅链接时,他们自己的电子邮件地址将被取消订阅。但当邮件列表的某个成员或者他们的垃圾邮件过滤器选择取消订阅链接时,邮件列表的电子邮件地址将被取消订阅。然后,邮件列表中的所有用户都将收到 “Unsubscribe Confirmation”消息,这可能让人感到意外、混乱。

要防止该取消订阅操作,请创建需要身份验证才能取消订阅的订阅,以便只有主题拥有者和订阅拥有者才能取消订阅。然后,选择该链接的所有人都将收到以下错误:

“Subscription not removed
Your subscription could not be removed because of an error.If you wish to unsubscribe but do not have AWS credentials, or have any other questions about Amazon SNS, please contact Amazon at sns-question@amazon.com.”(订阅未删除。您的订阅由于出错无法删除。如果您希望取消订阅但没有 AWS 凭证,或者您对 Amazon SNS 有任何其他问题,请通过 sns-question@amazon.com 联系 Amazon。)

解决方法

要将现有订阅替换为需要身份验证才能取消的订阅,请先删除现有订阅。然后,使用以下任一方法来设置新的订阅。

重要提示:您需要访问订阅确认电子邮件以确认新的订阅并完成设置。如果您订阅一个邮件列表到您的主题,首先添加您自己的电子邮件地址到邮件列表中,以便您可以确认订阅。

设置需要身份验证才能取消订阅的电子邮件订阅(Amazon SNS 控制台)

1.    打开 Amazon SNS 控制台将您的电子邮件地址订阅到您的主题

2.    在您的电子邮件中,找到来自 AWS 通知的订阅确认消息。发件人 ID 通常是 “no-reply@sns.amazonaws.com”。
重要提示:请勿使用订阅确认电子邮件中的链接确认订阅。

3.    将确认订阅链接中的 URL 复制到您的剪贴板。

4.    在 Amazon SNS 控制台的左侧导航菜单中选择订阅

5.    在订阅页面上,选择“等待确认”的订阅,然后选择确认订阅

6.    在确认订阅对话框中,粘贴您复制的订阅确认 URL。

7.    选择确认订阅

设置需要身份验证才能取消订阅的电子邮件订阅 (AWS CLI)

1.    在 AWS命令行界面 (AWS CLI) 中,运行此命令:

aws sns list-topics --region us-east-1

注意:在此命令中,将您的主题的 region 值替换为 AWS 地区

2.    在输出中,找到您要订阅的主题,然后将其 TopicArn 值复制到您的剪贴板。主题 ARN 如下:arn:aws:sns:us-east-1:0123456789012:my-topic

3.    运行此命令:

aws sns subscribe --topic-arn arn:aws:sns:us-east-1:0123456789012:my-topic --protocol email --notification-endpoint test@amazon.com --region us-east-1

注意:在此命令中,将 topic-arn 的值替换为您复制的主题 ARN,notification-endpoint 的值替换为您要订阅到主题的电子邮件地址,并将 region 的值替换为您主题的 AWS 地区。

4.    在您的电子邮件中,找到来自 AWS 通知的订阅确认消息。发件人 ID 通常是 “no-reply@sns.amazonaws.com”。
重要提示:请勿使用订阅确认电子邮件中的链接确认订阅。

5.    从确认订阅链接中将 URL 复制到您的剪贴板,将 URL 粘贴到文本编辑器,然后复制令牌。令牌是 URL 中间的一长串数字和字母,位于 “Token=”之后,“&Endpoint=”之前。例如:

https://sns.us-east-1.amazonaws.com/confirmation.html?TopicArn=arn:aws:sns:us-east-1:123456789012:my-topic&Token=2336412f37fb687f5d51e6e241da92fcfd03593fd8dfa4bd75978a2ad7255afb88e71028f6a034d06f469f6c7ef2
0a609348542a0c68a9561c03a39d59beb02e2b7112c45f7ae26c344819b39cf07f15bef6c6c09766f9caa1fa55c236e7
7c33a50870bc027c74640ff64a7e99a67117
&Endpoint=test@amazon.com

6.    使用您复制的令牌及步骤 2 中的相同主题 ARN 运行此命令:

aws sns confirm-subscription --token 2336412f37fb687f5d51e6e241da92fcfd03593fd8dfa4bd75978a2ad7255afb88e71028f6a034d06f469f6c7ef2
0a609348542a0c68a9561c03a39d59beb02e2b7112c45f7ae26c344819b39cf07f15bef6c6c09766f9caa1fa55c236e7
7c33a50870bc027c74640ff64a7e99a67117 --topic-arn arn:aws:sns:us-east-1:0123456789012:my-topic --authenticate-on-unsubscribe true --region us-east-1

注意:在此命令中,将 token 的值替换为您复制的令牌、topic-arn 的值替换为步骤 2 中的相同主题 ARN,并将 region 的值替换为您主题的 AWS 地区。


Amazon SNS 入门

订阅(AWS CLI 命令参考)

确认订阅(AWS CLI 命令参考)

这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?