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

Sli*_*k23 49 actionmailer ruby-on-rails-3

我正在尝试根据数据库中的布尔值发送多封电子邮件.该应用程序是一个简单的计划应用程序,用户可以将他们的班次标记为"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
Run Code Online (Sandbox Code Playgroud)

Chr*_*det 72

您可以像这样为多个收件人发送一封电子邮件.

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
Run Code Online (Sandbox Code Playgroud)

这将收集您的所有@recipients电子邮件地址并加入其中,.我想你也可以将数组传递给:to密钥但不确定.

唯一的问题是您将无法@name在模板中使用.:(

  • 是的,如果是这样的话.你可以使用`bcc`字段. (13认同)
  • 是的,但我真的不想公开每个用户的电子邮件地址......我想通过将.each块移动到模型并从那里调用传递来找到解决方案. (10认同)
  • 逗号是正确的分隔符,而不是分号.仅AFAIK Outlook使用semicon,并在生成最终电子邮件时将其转换为逗号. (6认同)
  • `bcc` 是一种达到“不想暴露每个用户的电子邮件地址”的方式,但由于这会隐藏收件人的地址,许多邮件服务会将邮件检测为垃圾邮件。 (2认同)

nol*_*oli 59

我有同样的问题..不知道这笔交易是什么..我回避它:

而不是打电话

Mailer.request_replacement(shift).deliver 
Run Code Online (Sandbox Code Playgroud)

从我的控制器,

我在邮件程序中定义了一个类方法,然后调用它.然后,该方法将遍历列表并调用"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
Run Code Online (Sandbox Code Playgroud)

并从控制器,呼叫

Mailer.send_replacement_request(shift)
Run Code Online (Sandbox Code Playgroud)

  • 如果您不在控制器中调用传递方法,它甚至不会进入邮件程序方法。 (2认同)

rao*_*dev 55

在Rails指南(Action Mailer Basics)中,它针对多封电子邮件说了以下内容:

电子邮件列表可以是电子邮件地址数组或单个字符串,地址以逗号分隔.

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

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


zol*_*ter 7

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

@recipients.each{ |recipient| Mailer.request_replacement(recipient, shift).deliver }
Run Code Online (Sandbox Code Playgroud)