如何通过电子邮件订阅Amazon SNS主题以使用电子邮件端点?

4
我正在使用Amazon SNS向用户发送简单的消息。我使用了几个主题和不同的端点,包括电子邮件。
目前,通过AWS Java SDK,Java后端处理对主题的订阅。我获取用户地址并通过AmazonSNSClient创建订阅。用户必须确认他的订阅。稍后,他可以通过点击由Amazon SNS发送的邮件中的链接来取消订阅。
我想知道的是 - 是否可能让用户通过电子邮件订阅?
比如发送一封邮件到subscribe@....amazonaws.com,主题ARN作为主题 - 或类似的方式?
然后我可以在我的应用程序中显示一个mailto:链接作为订阅链接,这在我的情况下有几个优点。

1
目前是否可以?不行。从安全角度来看,伪造“发件人”地址并不困难,这可能会导致大量的滥用问题。我建议联系AWS支持,并直接与他们讨论实现你想要的选项 - 也许还有其他一些服务/选项可以帮助你? - Krease
@Chris 大多数邮件列表都有这个选项。您仍需要确认订阅,我不明白为什么它不安全。 - lexicore
2个回答

6
我看到你将SNS与邮件列表进行比较。你需要意识到的是,SNS并不是设计用于作为邮件列表,并且在发送任何漂亮的电子邮件给最终用户方面非常糟糕。我只会建议使用SNS电子邮件来向管理人员发送系统故障警报等内容。我认为这种混淆是因为SNS移动推送功能被设计用于向最终用户推送消息,但其他SNS通知方法(电子邮件、http、SMS、SQS、Lambda)根本不是为最终用户而设计的。
如果你想保持AWS服务,那么你可以在SES上构建一个新闻通讯功能,或者使用类似Sendy之类的东西。我个人建议寻找像MailChimp或SendGrid这样的完整特色的电子邮件服务供应商。

我正在使用SNS发送关于大约3000个电梯/扶梯设施健康状况的通知。因此,这正是停机警报。这些电子邮件只有一行,不需要外观好看。从我的角度来看,SNS非常适合这项任务,我没有看到足够的附加价值来转移到其他任何东西。我的整个问题是,我是否可以只呈现一个mailto:...链接,还是需要一些后端来创建订阅。 - lexicore
不可能通过电子邮件订阅,因为其他人已经回复了。您通过将SNS与邮件列表服务进行比较来回复他们,这就是我发布我的答案的原因,解释Amazon没有构建SNS用作邮件列表服务。 - Mark B
1
我的问题是,我是否只能呈现mailto:...链接,还是需要一些后端创建订阅。- 你需要编写后端来创建订阅。 - Krease

2
订阅邮件通知的邮箱可能会被滥用 - 只要找到一种构造带有伪造“from”地址的电子邮件的方法,就可以拥有数百个订阅者。因此,从安全角度来看,这显然是不安全的 - 这可能是为什么它一开始就不存在的原因。

但我不明白为什么通过发送电子邮件订阅“从安全角度来看并不安全”,因为大多数邮件列表都有“通过发送电子邮件订阅”的选项。请参见Apache邮件列表。当然,您仍需要确认订阅。 - lexicore
1
仅仅因为它存在并不意味着它是一个好主意。我明显不喜欢使用电子邮件进行注册,因为伪造非常简单。 - Jan
这可能是一个好主意,也可能不是,这取决于使用情况。你提出了一个安全问题,我正在努力弄清楚它是否正确。只要我知道目标的邮件地址,我就可以为邮件列表开始数百个订阅,无论是通过电子邮件还是网页表单(只要它们不使用验证码,而且很多都不使用)。但与你所说的不同,如果他们不确认订阅(我无法伪造),我就不会得到数百个订阅者。因此,我真的不明白为什么通过发送邮件订阅通常会更不安全。我的错误在哪里? - lexicore
如果我理解你提出的流程:(1)用户发送电子邮件到subscribe@...,(2)某些系统将该电子邮件转换为订阅请求,并尝试将该电子邮件订阅到SNS,(3)SNS发送确认电子邮件。(4)用户确认订阅。您最初的问题暗示您正在询问“SNS是否可以成为该过程中的第二个系统”- 不行。您可以自己构建这样的东西,但正如马克在他的答案中提到的那样 - “_[SNS]确实非常糟糕地向最终用户发送任何漂亮的电子邮件_”。 - Krease
@Chris 是的,这是建议的流程。回到你最初的答案,你是否认为存在安全风险?关于“漂亮的电子邮件” - 这不是我的用例。我发送电梯/扶梯设施的状态更新通知,它们只是简单的一行。 - lexicore
1
我认为这并没有什么大问题 - 我们最初将其解释为无需确认的订阅(将“确认”视为来自特定电子邮件地址)。无论如何,您必须自己实现此组件(接收电子邮件并订阅用户到SNS),因为SNS不提供此功能。 - Krease

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接