Отправка нескольким получателям в Rails с помощью ActionMailer
Я пытаюсь отправить несколько электронных писем на основе логического значения в моей базе данных. Приложение представляет собой простое приложение для планирования, и пользователь может пометить их смену как "replacement_needed", и это должно отправить электронные письма всем пользователям, которые запросили эти письма. Проблема в том, что только каждый, кажется, отправляет на одно электронное письмо. Вот мой текущий код:
def request_replacement(shift)
@shift = shift
@user = shift.user
@recipients = User.where(:replacement_emails => true).all
@url = root_url
@recipients.each do |r|
@name = r.fname
mail(:to => r.email,
:subject => "A replacement clerk has been requested")
end
end
Ответы
Ответ 1
У меня такая же проблема. Не знаю, в чем дело. Я обойдусь этим:
вместо вызова
Mailer.request_replacement(shift).deliver
от моего контроллера,
Я бы определил метод класса в почтовой программе и позвонил. Этот метод затем перебирает список и вызывает доставку "n" раз... что, кажется, работает
class Mailer
def self.send_replacement_request(shift)
@recipients = ...
@recipients.each do |recipient|
request_replacement(recipient, shift).deliver
end
end
def request_replacement(recipient, shift)
...
mail(...)
end
end
и с контроллера вызовите
Mailer.send_replacement_request(shift)
Ответ 2
Вы можете просто отправить одно электронное письмо нескольким получателям, как это.
def request_replacement(shift)
@shift = shift
@user = shift.user
@recipients = User.where(:replacement_emails => true)
@url = root_url
emails = @recipients.collect(&:email).join(",")
mail(:to => emails, :subject => "A replacement clerk has been requested")
end
Это займет все ваши адреса электронной почты @recipients
и присоедините их к ,
. Я думаю, вы также можете передать массив клавише :to
, но не уверен.
Единственная проблема заключается в том, что вы не сможете использовать @name
в своем шаблоне.: (
Ответ 3
В Rails-руководствах (Action Mailer Basics) говорится следующее о нескольких электронных сообщениях:
Список писем может быть массивом адресов электронной почты или одной строкой с адресами, разделенными запятыми.
Таким образом, оба "[email protected], [email protected]"
и ["[email protected]", "[email protected]"]
должны работать.
См. больше на: http://guides.rubyonrails.org/action_mailer_basics.html
Ответ 4
Чтобы каждый получатель не видел другие адреса электронной почты:
@recipients.each{ |recipient| Mailer.request_replacement(recipient, shift).deliver }