我需要發送大量的電子郵件。在這種情況下建立的電子郵件是相當繁重的任務,所以我想緩存和重用:在ActionMailer中重新發送相同的電子郵件
mail = Rails.cache.fetch("newsletters/#{newsletter.id}") do
NewsletterMailer.products(newsletter)
end
recipients.find_each do |user|
mail.to = user.email
mail.deliver
end
但有了這個代碼僅第一收件人收到郵件。似乎相同的電子郵件不能發送一次以上。比我試圖重複它:
recipients.find_each do |user|
m = mail.dup
m.to = user.email
m.deliver
end
結果相同。只是爲了檢查這個假設,而不是重複我試過:
m = Marshal.load(Marshal.dump(mail))
然後電子郵件傳遞給所有收件人。
所以我的問題是如何「重置」(或像這樣的smth)電子郵件,並再次發送?
的ActionMailer版本是3.1.12
UPD
問題是,郵件有相同的 '郵件ID' 標頭。在開發過程中,我使用的是GMail,並不確切知道ActionMailer或GMail沒有發送。目前我沒有機會測試它。 反正相同的「郵件ID」不正確,所以我加了add_message_id
生成每個電子郵件新標題:
recipients.find_each do |user|
mail.add_message_id
mail.to = user.email
mail.deliver
end
也許有人會發現它的幫助還是有人可以給出一個更清楚的解釋。
我還沒有試過Peer Allan的答案。但它似乎也可以是解決方案,這就是爲什麼我接受它
我更新的問題 –