我们如何使用ruby on rails中的actionmailer每小时发送5000封电子邮件?

我对ActionMailer有一些疑问:

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

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

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

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

– – – – – – – – – – – – – – – – – – – – – – – – 添加 :

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

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

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

  • MailGun
  • SendGrid
  • PostmarkApp
  • MailChimp
  • Mailjet
  • PostageApp

所有这些都有通过单个API调用或SMTP事务发送多个消息的方法。

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

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

2&4)

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

说实话,你最好不要从你的网站发送那么多的电子邮件。 它并不是真的被设计成以这种方式使用。 如果我必须发送那种卷,我会考虑在后台进行工作,像Delayed Job这样的东西可以很好地工作,或者这里找到的许多异步rails邮件之一就可以解决问题。

您真正想要看的是您要求实现的要求,网站是否有必要以同步方式负责发送邮件? 在大多数情况下,这个问题的答案是否定的。 如果可以,您可以将此类任务推迟到系统的其他部分,让您的网站尽可能精益和专注。

这里的简单解决方案… Sidekiq或Resque

我强烈推荐Sidekiq,因为它不像服务器那样为这个服务器运行多个工作人员 – 只关注并发问题(确保你没有2个工作人员拿起相同的工作并发送重复的电子邮件)。

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

如果没有像Sidekiq,Resque或DelayedJob这样的后台工作人员,请不要尝试这样做。 如果您尝试使用任何大量电子邮件发送应用,您将冻结整个应用。 甚至在应用程序中发送激活电子邮件,什么不会导致您不必要的减速问题。

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

你可以像所提到的那样使用第三方。 Sendgrid很不错。 但这不是问题,这就是你如何简单轻松地做到这一点。

  1. 您可以在配置文件中定义SMTP设置,如果留空则使用sendMail local

  2. 同时

  3. 多个处理程序

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

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