如何去在我们红宝石使用的ActionMailer在轨道上发送每小时5000个电子邮件?(How de

2019-06-23 14:04发布

我对的ActionMailer一些问题:

  1. 怎样的ActionMailer连接到SMTP服务器?

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

  3. 怎么会发出像Facebook并( 在数字1000年 )作为电子邮件即时邮件影响on Rails应用程序的红宝石,以及如何将的ActionMailer处理呢?

  4. 任何其他解决方案/插件从RoR应用程序分开的ActionMailer发送大量电子邮件?

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

我们需要每十五分钟发送至少1000封电子邮件。 我们正在使用Notes Domino服务器作为我们的SMTP服务器! 究竟是什么样的问题,可能的架构。 我们已经在数据库中存储的电子邮件稍后发送它们,但我们需要的是发送的方法

Answer 1:

通常的事情是创建一个后台作业发送电子邮件。 的ActionMailer是单封电子邮件很好,但不倾向于发送多封电子邮件为每一个可能需要几秒钟才能完成后运行陷入困境。 这就是为什么我创建PostageApp帮助解决这些问题。

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

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

所有这些有一个API调用或SMTP交易中发送多封邮件的方式。



Answer 2:

1)的ActionMailer经由一组的参数,包括一个主机,端口和协议连接到SMTP服务器。

3)的效果将是一个缓慢的网站作为正在执行的许多任务同步的结果。

2和4)

的ActionMailer是慢了一点,以在负载情况下发出一吨的电子邮件,请记住,这是同步操作,因此它不是你真正想要的那种东西要在一个繁忙的网站做了很多。

说实话,你是不是掉从您的网站发送电子邮件的这一数量更好。 这不是真正设计了这样一种方式来使用。 如果我有送那种容积我想看看在做后台工作,像延迟招聘会工作以及在这里或中发现的许多异步轨道邮寄的一个在这里会做的伎俩。

你真的想看看这里是什么你要满足这个要求,是绝对有必要,该网站负责以同步的方式发送邮件? 在大多数情况下,这个问题的答案是否定的。 如果可以的话,你会好得多推迟这种任务对你的系统的另一部分,让你的网站为精简和集中,你可以。



Answer 3:

简单的解决方案在这里为你... Sidekiq或Resque

我强烈建议Sidekiq因为它不是就近服务器紧锣密鼓的进行运行多个工人这一个 - 但要小心并发问题(确保你没有2名工人拿起同样的工作,并发送重复的电子邮件即是)。

假设你设置20名Sidekiq工人,每个人都应该能够在一个简单的300-600每分钟发送一封电子邮件,每2-4秒,你看。

不要试图做这个没有背景的工作人员都Sidekiq,Resque,或DelayedJob。 如果你尝试在应用程序与任何大量的电子邮件发送你会冻结你的整个应用程序。 即使发送电子邮件激活在应用并没有什么会导致你不必要减慢的问题。

我有一个工人来处理周期性的排队和处理该发送另一个Worker类。 我们使用Resque(6名工人也许?)这对旧的应用程序(预sidekiq)到500个邮件每5分钟发送与周围没有问题。

您可以赠品使用第三方像是有人提及。 Sendgrid是体面的。 但是,这不是问题,这是你如何自己动手简单和容易。



Answer 4:

  1. 您在配置文件中如果留空定义SMTP设置,它使用Sendmail的地方

  2. 同时

  3. 多个处理程序

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

你还可以做1000.times做email.deliver但它可能会崩溃乌尔服务器



文章来源: How de we send out 5000 emails per hour using actionmailer in ruby on rails?