Мне нужно отправить большое количество писем. Создание электронной почты в этом случае довольно тяжелая задача, так что я пытаюсь кэшировать и использовать его:Отправить то же электронное письмо в 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))
Затем электронное письмо доставляется всем получателям.
Таким образом, мой вопрос заключается в том, как можно «переустановить» (или что-то подобное) и отправить его еще раз?
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. Но похоже, что это также может быть решением, поэтому я принял его
Я обновил вопрос –