如何通过 Amazon SES 重新发送由于速率限制而未发送的电子邮件

问题描述 投票:0回答:1

我正在使用 Amazon SES 通过 cron 作业发送批量电子邮件。我的应用程序每秒处理大约 40-50 封电子邮件,但我只允许通过 SES 发送 22 封电子邮件。

如果我发送超过 22 封电子邮件,我会遇到以下错误 -

com.amazonaws.services.simpleemail.model.AmazonSimpleEmailServiceException: Maximum sending rate exceeded. 
(Service: AmazonSimpleEmailService; Status Code: 400; Error Code: Throttling; 
Request ID: 5xxxxxx-xxxx-xxxx-xxxx-xxxxxxx8a4; Proxy: null)

我知道,为了将来避免这种情况,我必须在我的代码中通过使用缩减、指数退避等方式来优雅地处理它,如本doc中所述。

但是,我想知道是否有任何方法可以重新发送由于速率限制而未发送的电子邮件(过去发送的)。 我可以看到 requestId 以及错误。 SES 是否将其记录在某处并提供任何重新发送机制?

即使我可以获得未通过的电子邮件列表,也会很有帮助。

amazon-web-services smtp amazon-cloudwatch amazon-ses rate-limiting
1个回答
0
投票

如果您的请求因某种原因被 SES 拒绝,它甚至不会进入管道,因此不会存储在 AWS 上的任何位置。

即使确实如此,SES 也不会立即记录消息元数据。他们有一篇博客文章专门解决这个问题:

目前SES提供了各种指标,例如发送数量、拒绝等。但是在发送电子邮件时没有直接的方法来记录发件人电子邮件身份、收件人电子邮件身份、主题、时间戳、源IP地址、messageId等信息。

,他们建议构建一个涉及 SNS 和 Lambda 的自定义解决方案,以实现 SES 作业的详细日志记录。

这是许多服务的问题,因此我喜欢实现的一种低代码解决方案是通过 API 网关代理这些调用,并在网关级别启用 Cloud Watch 日志。它确实会稍微增加您的 AWS 账单,但它提供了进出 AWS 服务的更多可见性。

另一个好处是,对于集成不太深入的应用程序来说,它降低了与 AWS 的耦合,因为 AWS 网关可以设置为仅使用访问密钥,因此 HTTP 客户端成为唯一的依赖项。

我知道它现在对您没有多大帮助,但我将其留在这里供未来的访客使用。

© www.soinside.com 2019 - 2024. All rights reserved.