5

我对 ActionMailer 有一些疑问:

  1. Actionmailer 如何连接到 smtp 服务器?

  2. 如果电子邮件数量高 > 1000 ,连接是并发的还是并行的?

  3. 发送像 facebook 这样的电子邮件(数量为 1000 个)作为即时电子邮件将如何影响 ruby​​ on rails 应用程序以及 actionmailer 将如何处理它?

  4. 除了 ActionMailer,还有其他解决方案/插件可以从 RoR 应用程序发送大量电子邮件吗?

- - - - - - - - - - - - - - - - - - - - - - - - 添加 :

我们需要每 15 分钟发送至少 1000 封电子邮件。我们使用 Notes Domino 服务器作为我们的 smtp 服务器。!这种问题的可能架构是什么。我们已经将电子邮件存储在数据库中以便以后发送,但需要的是发送方法

4

4 回答 4

8

通常的做法是创建一个后台作业来发送电子邮件。ActionMailer 非常适合单封电子邮件,但在发送多封电子邮件后往往会遇到麻烦,因为每封电子邮件可能需要几秒钟才能完成。这就是我创建PostageApp来帮助解决这些问题的原因。

市场上的一些服务可以帮助您从 Rails 发送大量电子邮件:

所有这些都可以通过单个 API 调用或 SMTP 事务发送多条消息。

于 2012-04-12T14:37:38.827 回答
4

1) Actionmailer 通过一组参数连接到您的 smtp 服务器,包括主机、端口和协议。

3) 由于执行了许多同步任务,结果将是一个缓慢的站点。

2 & 4)

Actionmailer 有点太慢了,无法在负载下发送大量电子邮件,请记住,它是一个同步操作,因此它并不是您想要在繁忙的网站上经常做的事情。

老实说,您最好不要从您的网站发送大量电子邮件。它并不是真正设计用于以这种方式使用的。如果我必须发送那种我会考虑在后台完成工作的卷,那么像延迟作业这样的东西在这里会很好用,或者在这里找到的许多异步 Rails 邮件程序中的一个就可以了。

您真正想在这里看到的是您要满足的要求,该网站是否绝对有必要负责以同步方式发送邮件?在大多数情况下,这个问题的答案是否定的。如果可以,最好将此类任务推迟到系统的另一部分,尽可能保持站点精简和集中。

于 2012-04-12T14:49:10.730 回答
2

在这里为您提供简单的解决方案... Sidekiq 或 Resque

我强烈推荐 Sidekiq,因为它不像服务器那样密集运行多个工作人员,只需要注意并发问题(确保你没有 2 名工作人员接手相同的工作并发送重复的电子邮件)。

假设您设置了 20 个 Sidekiq 工作人员,每个工作人员应该能够每 2-4 秒发送一封电子邮件,您每分钟可以轻松查看 300-600 个。

不要尝试在没有 Sidekiq、Resque 或 DelayedJob 等后台工作人员的情况下执行此操作。如果您尝试在应用程序中发送任何大量电子邮件,您将冻结整个应用程序。即使在应用程序中发送激活电子邮件,也不会导致您不必要的减速问题。

我将有一个定期处理排队的 Worker 和另一个处理发送的 Worker 类。我们在一个较旧的应用程序(pre-sidekiq)上使用 Resque(可能是 6 个工作人员?)每 5 分钟发送大约 500 封电子邮件,没有任何问题。

您可以像提到的那样使用第三方。Sendgrid很不错。但这不是问题,这就是您自己简单轻松地进行操作的方式。

于 2012-12-17T20:34:58.603 回答
1
  1. 如果留空,则在配置文件中定义 SMTP 设置,它使用 sendMail local

  2. 同时

  3. 多个处理程序

  4. Rails 应用程序有批量电子邮件插件吗?

你也可以做 1000 次 email.deliver 但它可能会崩溃你的服务器

于 2012-04-12T14:33:16.780 回答