如何在 AWS SES 中一次发送大量邮件(超过发送速率限制)

How to send large number of mails (more than sending rate limit) at a time in AWS SES

提问人:Voldemort 提问时间:11/6/2023 更新时间:11/17/2023 访问量:38

问:

我有一个 AWS SES 服务,其发送速率为每秒 100 封邮件。我们的应用程序向教育机构内的所有学生发送电子邮件。需要分发大量电子邮件,例如一次 1000 封,以通知所有学生。但是,我们在尝试一次发送所有电子邮件时遇到了问题,导致无法送达。要发送的邮件数量可能会有所不同。

  1. 我正在寻求有关如何利用其他 AWS 服务在有限的时间内高效发送大量电子邮件而不会遇到拒绝或退回的指导。

  2. 我想在我们的应用程序列表中获得反馈 拒绝的邮件,那么如何找到被退回或被拒绝的邮件

  3. 有没有其他方法可以使用 lambda/sqs 实现这一点

aws-lambda SQS 亚马逊-SNS -SES 亚马逊-CloudWatchLogs

评论

0赞 JCompetence 11/6/2023
如果您想增加SES在一秒钟内发送的电子邮件数量,则需要提高帐户的配额。docs.aws.amazon.com/ses/latest/dg/......
0赞 Voldemort 11/6/2023
感谢@JCompetence的回复,但是我们可以提高发送率。是否可以将配额提高到每秒 1000 或 2000 封邮件?
0赞 JCompetence 11/6/2023
我建议你首先要求他们把它提高到你想要的数字,然后看看他们是否遵守。没有什么是免费的。他们将根据配额增加向您收费。
0赞 Voldemort 11/6/2023
AWS 是否会因发送速率配额的增加而收取额外费用?它基于我们发送的邮件,对吗?@JCompetence .

答:

0赞 emma ray 11/17/2023 #1

假设总吞吐量配额足以最终发送所有电子邮件,并且您只需要一种方法来平滑负载曲线,您应该考虑使用一个系统来排队并按固定速率发送电子邮件。

下面是如何实现速率限制电子邮件队列的示例:

  1. 将您的电子邮件添加到 SQS 队列
  2. 以固定的时间间隔轮询队列,拉取一批大小不超过服务限制的消息
  3. 使用SES立即发送电子邮件
  4. 配置 SES 以将电子邮件传输状态发布到 Kinesis 流
  5. 在消息到达时使用 Lambda 触发器中的 Kinesis 流,并将退回/拒绝存储在系统中

以固定的时间间隔轮询队列可能很棘手。最简单的解决方案可能是 EventBridge 计划,它每分钟触发一次 Lambda;Lambda 可以 (2) 根据您的 SES 配额从队列中提取电子邮件。但是,EventBridge 计划不支持短于 1 分钟的间隔。

如果您需要更短的时间间隔(例如,对于预期快速交付的登录代码),您可以添加一个中间函数,例如步骤函数,它会多次触发 Lambda。在这种情况下,您的 EventBridge 计划可以每分钟触发一次步骤函数,这将导致每分钟触发多个 Lambda 触发器。

如果正确计算了计时和批大小,这应该会导致系统不能超过 SES 速率限制。