使用rails发送100封电子邮件

时间:2014-05-09 07:58:09

标签: ruby-on-rails

我想在讨论发生变化时通知粉丝。讨论有很多粉丝。 现在我在讨论课中这样做:

self.followers.each do |follower|
    DiscussionMailer.delay.new_reply_notification(user, reply) unless reply.user == user 
end

虽然这是异步的,但它很慢,内存很耗,并且会对redis和sidekiq产生依赖性。 如何将self.followers数组发送到mailgun或其他api并发送所有类似的电子邮件? 这是我的实际邮件方法:

  def new_reply_notification(user, reply)
    @user = user
    @reply = reply
    @reply_user = @reply.user

    mail(to: user.email,
         from: "arobot@gmail.com"
         subject: "#{@reply_user.user_name} has just replied!")
  end

所以我认为邮件方法在这里很关键。如何更改它以执行以下操作:

mail(to: followers_aray,
     from: "arobot@gmail.com"
     subject: "#{@reply_user.user_name} has just replied!")

对于任何宝石来说,mandrill宝石看起来都很有希望。

更新

每个人都告诉我要在工人身上这样做。虽然我同意,但我在smtp日志中注意到了这个字段:

"envelope": {
        "targets": "address@gmail.com", 
        "transport": "", 
        "sender": "arobot@gmail.com"
    }

所以我猜我的信封可以有任意数量的目标。如果我的smtp服务器正在完成所有工作,为什么我需要使用worker?

1 个答案:

答案 0 :(得分:1)

在你的情况下,你应该使用sidekiq或类似的方式从队列中发送你的电子邮件,这将提高你的表现并将其转移到后台工作而不是实时工作。

更改讨论后,将所有关注者推送到队列中,然后逐个发送。

看看这里:

http://sidekiq.org/ https://github.com/mperham/sidekiq/wiki