Ruby on rails 在ActionMailer中重新发送相同的电子邮件

Ruby on rails 在ActionMailer中重新发送相同的电子邮件,ruby-on-rails,ruby,ruby-on-rails-3,actionmailer,Ruby On Rails,Ruby,Ruby On Rails 3,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 但使用此代码,只有第一个收件人接收电子邮件。

我需要发送大量电子邮件。在这种情况下构建电子邮件是一项相当繁重的任务,因此我尝试缓存和重用它:

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
同样的结果。为了验证这个假设而不是dup,我尝试了:

m = Marshal.load(Marshal.dump(mail))
然后将电子邮件发送给所有收件人

所以我的问题是如何“重置”(或类似smth)电子邮件并再次发送

ActionMailer版本是3.1.12

UPD

问题是电子邮件的“消息ID”标题相同。在开发过程中,我使用的是GMail,但不知道ActionMailer或GMail是否发送了邮件。目前我没有机会测试它。 无论如何,相同的“邮件ID”不正确,因此我添加了
add\u Message\u ID
为每封电子邮件生成新的标题:

recipients.find_each do |user|
  mail.add_message_id
  mail.to = user.email
  mail.deliver
end
也许有人会觉得这很有帮助,或者有人可以给出更清楚的解释


我还没试过艾伦的答案。但它似乎也是一种解决方案,这就是为什么我接受它的原因,假设您可以尝试发送电子邮件的每个收件人的电子邮件中的数据不需要更改

#确定将电子邮件正文转换为字符串的方法
email\u body=时事通讯邮件生成器。生成电子邮件(时事通讯)
recipients.find_每个do|用户|
产品(user.email,email\u body)。交付
结束
类newslettesmailer
示例邮件代码来自这里