0

我尝试在 Rails 中创建一个基于 delay_jobs 的邮件列表功能。现在我通过遍历用户表和.deliver每个邮件地址的邮件来发送邮件。

我怎样才能将它集成到delayed_jobs,所以它每5分钟发送50封邮件并记住哪些地址已经完成?我是否需要制作一个单独的表格来存储所有已发送的邮件并在每次发送另外 50 封邮件时检查?

提前致谢。

4

3 回答 3

4

您可能希望有已发送电子邮件的表格条目。这样,如果流程出现故障或以某种方式失败,它就可以作为审计线索。

建议您考虑使用像 MongoLab、MongoHQ 或 SimpleDB 这样的弹性云数据库来执行此操作。(基于 Mongo 的服务可以轻松扩展新电子邮件条目的模式。)

如果你这样做了,那么像 SimpleWorker 这样的云工作者队列可以轻松地同时或分批发送大量电子邮件以绕过任何速率限制。(完全披露:我在 Iron.io/SimpleWorker 工作)

您正在采用一种很好的方法将多个电子邮件发送捆绑到单个工作人员任务中,以分摊工作人员设置成本。使用弹性云工作者系统,您可以让主工作者不按计划进行,然后将许多从属工作者任务排队,每个从属工作者任务都有一组用户要发送。

使用表条目,您可以返回数据表并处理任何失败或未通过的电子邮件。

于 2011-09-09T19:42:53.643 回答
0

我认为,50 封电子邮件并不是真的可以在几秒钟内发送出去。用于foreverb每 5 分钟发送一次电子邮件。

于 2011-09-09T03:08:33.590 回答
0

让延迟的工作完成所有工作:

User.all.each_with_index |user, index|
  Mailer.delay({:run_at => ((index / 50) * 5).minutes.from_now}).send_newsletter(user)
end

这应该有效但未经测试。

于 2011-09-09T20:18:27.620 回答