Подтвердить что ты не робот

Отправка нескольким получателям в 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
4b9b3361

Ответ 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 }