大量のメールを送信する必要があります。この場合、メールを作成するのは非常に重い作業なので、キャッシュして再利用しようとしています。
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))
その後、電子メールはすべての受信者に配信されます。
だから私の質問は、どうすればメールを「リセット」(またはそのようなもの)して、もう一度送信できるのですか?
ActionMailer のバージョンは 3.1.12 です
UPD
問題は、電子メールに同じ「Message-ID」ヘッダーが含まれていたことです。開発中、私は GMail を使用していましたが、ActionMailer または GMail が送信していないことを正確に知りません。現時点では、テストする機会がありません。とにかく同じ「Message-ID」が間違っているのでadd_message_id
、各メールの新しいヘッダーを生成するために追加しました:
recipients.find_each do |user|
mail.add_message_id
mail.to = user.email
mail.deliver
end
たぶん、誰かが役に立つと思うか、誰かがより明確な説明をすることができます.
Peer Allanの答えは試していません。でも解決にもなりそうなので受け入れました