2014-05-09 215 views
3

我想在討論發生變化時通知關注者。討論有很多追隨者。 現在,我在課堂討論這樣做:發送100封電子郵件

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

雖然這是asyncronous,這是相當緩慢的,內存餓,就建立和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: "[email protected]" 
     subject: "#{@reply_user.user_name} has just replied!") 
    end 

,所以我想在郵件的方法在這裏是關鍵。我怎樣才能改變它做這樣的事情:

mail(to: followers_aray, 
    from: "[email protected]" 
    subject: "#{@reply_user.user_name} has just replied!") 

Im up up for any gems,mandrill gem looks promising。

更新

大家都告訴我在工作人員這樣做。雖然我同意,我已經在我的SMTP日誌注意到這個領域:

"envelope": { 
     "targets": "[email protected]", 
     "transport": "", 
     "sender": "[email protected]" 
    } 

所以即時猜測我的信封可以有任意數量的目標。如果我的smtp服務器正在完成所有工作,爲什麼我需要使用工人?

+1

如果你把所有的地址在'到:'每個人都會看到所有電子郵件地址。可能不想讓你(或他們)想要。我們通常會在'to:'字段中輸入一個自己的電子郵件地址,並在'bcc:'中輸入所有收件人。 –

+0

酷...密件抄送需要一個數組? – Starkers

+0

':','cc:'和'bcc:'都可以採用單個地址或數組。 http://api.rubyonrails.org/classes/ActionMailer/Base.html#method-i-mail –

回答

1

對於您的情況,您應該使用sidekiq或類似的方式將您的電子郵件從隊列中發送出去,這樣可以提高性能並將其轉移到後臺作業,而不是實時。

討論結束後,將所有追隨者排隊,並逐個發送。

看看這裏:

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

相關問題