AWS SES向多个收件人发送电子邮件的速度太慢

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

我创建了一个Job Queue模块来处理作业并构建“社交网络”类型的电子邮件。 2个过程包括:

  1. 构建自定义电子邮件(视图),例如User A and User B have commented on your postUser B and User C also likes User C's post。每个收件人都会收到不同的电我最初创建了一个新的Swiftmailer实例并添加了消息内容,主题和收件人。然后我将这些实例添加到数据库中。
  2. 一个cron作业运行以在以后获取并发送这些电子邮件。

在进行基准测试时,我意识到它每秒发送2封电子邮件。所以我尝试在数据库中存储Swift_Message实例。虽然没有运气,但仍需要很长时间。

目前,代码

  • 创建一个新的Swift_SmtpTransport
  • 创建一个新的Swift_Mailer实例。 循环通过从DB检索到的Swift_Message消息 发送每封电子邮件。

但它平均每秒约2封电子邮件。有什么方法可以改进加快交货的过程吗?我使用Amazon SES作为我的SMTP传输,我知道它至少可以处理5封电子邮件。

所以这可能是我做错了。任何想法都赞赏。

编辑

请记住,每个收件人的邮件都不同。我可以试用Swift_Decorator插件,但这意味着我将不得不改变视图的生成方式。我只是在寻找其他替代方案来加快这个过程。

php kohana-3 swiftmailer amazon-ses
1个回答
2
投票

我使用Amazon SES作为我的SMTP传输

根据我使用SES的经验,我看到的最小API响应时间已经在半秒范围内,而平均值则在一秒左右。这不是对TCP / IP连接,可用带宽等的连接的限制,而是对每个连接的请求的处理的限制。官方支持论坛上的其他人报告了同样的情况。 SMTP传输速度不快。

发送速度更快的唯一方法是并行发送。这是他们在官方支持论坛上推荐的方法。

只要您保持在“每秒邮件数”配额下,SES API就允许多个同时连接。如果您不知道当前的每秒配额,请检查您的发送统计信息。我不知道SMTP传输处理超出此限制。

为了并行发送更大量的邮件,我们修改了队列处理器以便能够并行运行。为了确保邮件永远不会被发送两次,我们在表中添加了一个“PID x抓住这个”列并运行类似于UPDATE Queue SET selected_pid = ? WHERE target_ts < NOW() AND selected_pid IS NULL LIMIT X的查询。然后我们会查找我们可以发送的邮件,将它们全部发送,然后再试一次,直到我们用完了那段时间内我们需要发送的邮件。

我们还修改了填充队列的代码,以确保队列中的邮件永远不会比我们发送的邮件多。我们能够做到这一点因为我们分批发送邮件。当你持续不断地发送邮件时,很可能你不需要跳过那个箍。只需确保您的发送代码知道如何正确响应各种超额配额错误。

作为基于cron的队列处理器的替代方案,请考虑使用Gearman设置一组异步后台工作程序来发送邮件。

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