提问人:deathByChocolate 提问时间:11/15/2023 更新时间:11/15/2023 访问量:38
如何通过 Amazon SES 重新发送由于速率限制而未发送的电子邮件
How to resend emails via Amazon SES which didn't go because of rate limiting
问:
我正在使用 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)
我知道,为了避免将来出现这种情况,我将不得不在我的代码中通过使用本文档中提到的降频、指数退避等来优雅地处理它。
但是,我想知道是否有任何方法可以重新发送由于速率限制而未通过的电子邮件(过去发送)。 我可以看到requestId以及错误。SES是否将其记录在某个地方并提供任何重新发送机制?
即使我能得到未通过的电子邮件列表,也会有所帮助。
答:
如果您的请求因任何原因被 SES 拒绝,它甚至没有进入管道,因此它不会存储在 AWS 上的任何位置。
即使这样做了,SES 也不会现成地记录消息元数据。他们有一篇博文就解决了这个问题:
目前,SES提供了各种指标,如发送次数、拒绝次数等,但在发送电子邮件时没有直接的方法来记录发件人电子邮件身份、收件人电子邮件身份、主题、时间戳、源IP地址、messageId等信息。
,其中他们建议构建一个涉及 SNS 和 Lambda 的自定义解决方案,以实现 SES 作业的详细日志记录。
这是许多服务的问题,因此我喜欢实现的一个低代码解决方案是通过 API Gateway 代理这些调用,并在网关级别启用 Cloud Watch 日志。它确实会略微增加您的 AWS 账单,但它为进出 AWS 服务的内容提供了更多的可见性。
作为附带奖励,它降低了与AWS的耦合,因为AWS网关可以设置为仅使用访问密钥,因此HTTP客户端成为唯一的依赖项。
我知道它现在对你没有帮助,但我会把它留在这里给未来的访客。
评论