使用ActionMailer在Rails中发送给多个收件人

我试图根据我的数据库中的布尔值发送多个电子邮件。 该应用程序是一个简单的调度应用程序,用户可以将他们的class次标记为“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 

我有同样的问题..不知道什么是交易..我回​​避了:

而不是打电话

 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) 

你可以发送一个电子邮件给多个这样的收件人。

 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 

这将采取您的所有@收件人的电子邮件地址,并join, 。 我想你也可以将一个数组传递给:to键但不能确定。

唯一的问题是你将无法在模板中使用@name 。 🙁

在Rails指南(Action Mailer Basics)中,它对下面的多个邮件进行了说明:

电子邮件列表可以是一组电子邮件地址或单个string,地址用逗号分隔。

因此, "test1@gmail.com, test1@gmail.com"["test1@gmail.com", "test1@gmail.com"]应该工作。

有关更多信息,请访问: http : //guides.rubyonrails.org/action_mailer_basics.html

为了防止每个收件人看到其他电子邮件地址:

 @recipients.each{ |recipient| Mailer.request_replacement(recipient, shift).deliver }