如何使用Ruby on Rails中的ActionMailer每小时发送5000封电子邮件?

6

我有一些关于ActionMailer的问题:

  1. ActionMailer如何连接到SMTP服务器?

  2. 如果邮件数量超过1000封,连接是并发还是并行的?

  3. 像Facebook那样发送大量邮件(数量达到1000以上),会对Ruby on Rails应用程序产生什么影响?ActionMailer如何处理?

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

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

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


这肯定是一个重复的问题。在 Stack Overflow 上搜索一下吧。 - ybakos
2
嘿,这是一个“哎呦”问题 ;-)。也许可以找第三方发送者来处理,比如SendGrid? - halfer
1
并发还是并行?它们有区别吗? - kafuchau
这个问题应该重新命名为:“如何使用ActionMailer让5000人讨厌你” - daino3
4个回答

9
通常情况下,我们会创建一个后台任务来发送电子邮件。虽然ActionMailer非常适合单个邮件,但在发送多个邮件后可能会遇到问题,因为每封邮件都需要几秒钟的时间才能完成。这就是为什么我创建了PostageApp来帮助解决这些问题。
市场上有一些服务可以帮助你从Rails发送大量电子邮件: 所有这些服务都有使用单个API调用或SMTP事务发送多个消息的方法。

5

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

3) 执行许多同步任务会导致网站变慢。

2 & 4)

Actionmailer发送大量邮件时速度有点慢,需要记住它是同步操作,因此在繁忙的网站上不应该经常这样做。

说实话,最好不要从您的网站发送那么多电子邮件。它并不是为这种方式而设计的。如果我必须发送那种数量的邮件,我会考虑在后台执行此项工作,类似Delayed Job之类的东西会很有效,或者在这里找到许多异步rails邮件程序也可以解决问题。

您真正想要关注的是您试图满足的要求,是否绝对必要让网站以同步方式发送邮件?在大多数情况下,答案是否定的。如果可以的话,您最好将这种任务推迟到系统的其他部分,使您的网站尽可能精简和专注。


2
这里有一个简单的解决方案... Sidekiq或Resque 我强烈推荐使用Sidekiq,因为它对于运行多个工作程序并不需要太多服务器资源。但是请注意并发问题(确保您没有2个工作程序选择相同的作业并发送重复电子邮件)。例如,如果您设置了20个Sidekiq工作程序,则每个工作程序应该能够每2-4秒发送一封电子邮件,这样您就可以轻松地处理300-600封电子邮件每分钟。
请勿尝试在没有后台工作程序(如Sidekiq、Resque或DelayedJob)的情况下执行此操作。如果您尝试使用大量电子邮件在应用程序中发送邮件,您将会冻结整个应用程序。即使在应用程序中发送激活电子邮件等操作也会导致不必要的减速问题。
我建议您使用一个工作程序定期处理队列,并使用另一个工作程序类来处理发送。我们在旧版应用程序(pre-sidekiq)上使用Resque(可能有6个工作程序)进行此操作,每5分钟发送约500封电子邮件,没有任何问题。
当然您也可以使用像之前提到的第三方服务商,如Sendgrid。但这不是问题的解决方法,这是如何自己简单易行地完成此操作。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接