0

大量のメールを送信する必要があります。この場合、メールを作成するのは非常に重い作業なので、キャッシュして再利用しようとしています。

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の答えは試していません。でも解決にもなりそうなので受け入れました

4

1 に答える 1