如何通过电子邮件订阅带有电子邮件端点的 Amazon SNS 主题?

Posted

技术标签:

【中文标题】如何通过电子邮件订阅带有电子邮件端点的 Amazon SNS 主题?【英文标题】:How to subscribe to Amazon SNS topic with e-mail endpoint via e-mail? 【发布时间】:2016-04-08 23:06:07 【问题描述】:

我正在使用 Amazon SNS 向用户发送简单消息。我正在使用多个具有不同端点的主题,包括电子邮件。

目前,主题订阅由 Java 后端通过 AWS Java SDK 处理。我得到用户的地址并通过AmazonSNSClient 创建订阅。用户必须确认他的订阅。稍后,他只需单击发送给我的 Amazon SNS 的邮件中的链接即可取消订阅。

我想知道的是 - 是否可以让用户通过电子邮件订阅? 比如向subscribe@....amazonaws.com 发送一封电子邮件,主题的 ARN 作为主题 - 或类似的?

然后我可以在我的应用程序中显示一个mailto: 链接作为订阅链接,这对我来说有一些优势。

【问题讨论】:

目前可以吗?不,这不对。从安全的角度来看,伪造“发件人”地址并不难,这可能会导致大量滥用。我建议 ping AWS 支持并讨论您想要直接与他们实施的选项 - 也许还有一些其他服务/选项可以提供帮助? @Chris 大多数邮件列表都有这个选项。你还需要确认订阅,我看不出它为什么不安全。 【参考方案1】:

我看到您将 SNS 与邮件列表进行比较。您需要意识到的是,SNS 并不是为用作邮件列表而设计的,而且在向最终用户发送任何类型的漂亮电子邮件方面确实非常糟糕。我只建议将 SNS 电子邮件用于向您的管理人员发出系统中断警报之类的事情。我认为出现这种混淆是因为 SNS 移动推送功能旨在将消息推送给最终用户,但其他 SNS 通知方法(电子邮件、http、SMS、SQS、Lambda)根本不是为最终用户设计的。

如果您想坚持使用 AWS 服务,那么您可以在 SES 之上构建一个时事通讯功能,或者使用 Sendy 之类的东西。我个人建议在 AWS 之外寻找功能齐全的电子邮件服务,例如 MailChimp 或 SendGrid。

【讨论】:

我正在使用 SNS 发送有关大约 3000 部电梯/自动扶梯设施的健康状况的通知。因此,这正是中断警报。这些电子邮件是单行的,不需要好看。从我的角度来看,SNS 非常适合这项任务,我认为没有足够的附加值来转移到其他任何东西上。我的整个问题是我是否可以只呈现一个mailto:... 链接,或者我是否需要一些后端来创建订阅。 不,不能通过电子邮件订阅,因为其他人已经回复了。您通过将 SNS 与邮件列表服务进行比较来回应他们,这就是我发布答案的原因,并解释说亚马逊没有构建 SNS 来用作邮件列表服务。 “我的全部问题是我是否可以只呈现一个 mailto:... 链接,或者我是否需要一些后端来创建订阅。” - 你需要编写您的后端以创建订阅。【参考方案2】:

通过电子邮件订阅电子邮件通知可能会被滥用 - 只要找到一种方法来构建带有伪造的from 地址的电子邮件,您就会拥有数百个订阅者。

所以从安全的角度来看,这显然是不安全的——这可能是它最初不存在的原因。

【讨论】:

但我不明白为什么通过发送邮件订阅“从安全角度来看是不安全的”,因为大多数邮件列表都有“通过发送邮件订阅”选项。见Apache Mailing Lists。当然,您仍然需要确认订阅。 仅仅因为它存在并不意味着它是一个好主意。我显然不喜欢使用电子邮件进行注册,因为伪造非常简单。 这可能是也可能不是一个好主意,具体取决于用例。你带来了安全问题,我正试图弄清楚它是否正确。只要我知道目标的邮件地址,我就可以开始订阅数百个邮件列表,无论我是通过电子邮件还是网络表单(只要他们不使用验证码和许多别)。但与您所说的不同,如果他们不确认订阅(我无法伪造),我将不会获得数百个订阅者。所以我真的不明白为什么通过发送邮件订阅通常不太安全。我的错在哪里? 如果我理解您提出的流程:(1) 用户向subscribe@... 发送电子邮件,(2) 某些系统将该电子邮件转换为订阅请求,并尝试将该电子邮件订阅到 SNS,(3 ) SNS 发送确认邮件。 (4) 用户确认订阅。您最初的问题暗示您在问“SNS 在该过程中是否可以成为系统#2”-不,它不能。您可以自己构建一些东西,但正如 Mark 在他的回答中提到的那样 - “[SNS] 在向最终用户发送任何类型漂亮的电子邮件方面确实非常糟糕 我认为这没有什么大问题 - 我们最初将其解释为没有确认的订阅(将“确认”视为来自特定电子邮件地址)。在任何情况下,您都必须自己实现这样一个组件(接收电子邮件并为用户订阅 SNS),因为 SNS 不会这样做。

以上是关于如何通过电子邮件订阅带有电子邮件端点的 Amazon SNS 主题?的主要内容,如果未能解决你的问题,请参考以下文章

如何创建带有发票的 Stripe 订单?

带有电子邮件发票的条带订阅

带有取消订阅链接的 Rails 电子邮件

通过 sendgrid/mail 发送时,如何向我的电子邮件添加取消订阅链接

使用phpmailer通过带有图像的html文件发送电子邮件

使用 Fetch api Javascript 取消订阅电子邮件