使用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 }