我正在尝试根据数据库中的布尔值发送多封电子邮件。该应用程序是一个简单的计划应用程序,用户可以将他们的班次标记为“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
答案 0 :(得分:70)
您可以像这样为多个收件人发送一封电子邮件。
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
。 :(
答案 1 :(得分:58)
我遇到了同样的问题..不知道这笔交易是什么......我回避它:
而不是打电话
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 :(得分:49)
在Rails指南(Action Mailer Basics)中,它针对多封电子邮件说明了以下内容:
电子邮件列表可以是一组电子邮件地址,也可以是一个字符串,地址以逗号分隔。
因此,"test1@gmail.com, test1@gmail.com"
和["test1@gmail.com", "test1@gmail.com"]
都应该有效。
详情请见:http://guides.rubyonrails.org/action_mailer_basics.html
答案 3 :(得分:7)
阻止每位收件人查看其他电子邮件地址:
@recipients.each{ |recipient| Mailer.request_replacement(recipient, shift).deliver }
答案 4 :(得分:1)
我正在使用 Rails 5 并且我有相同的情况,电子邮件只发送给最后一个收件人,但它也是以纯文本形式发送的,而不是HTML电子邮件。
在尝试了一些建议之后,我最终以这种方式修复它:
邮件:
class BrochureMailer < ApplicationMailer
default from: "info@site.com"
def newsletter(sponsor, brochures_list)
@sponsor = sponsor
@brochures = brochures_list
mail(
to: @sponsor.email,
subject: "Interesting subject!"
)
end
end
调用邮件程序的控制器:
class Admin::DashboardController < Admin::BaseController
def send_newsletter
sponsors = params[:sponsor_ids]
brochures = params[:brochure_ids]
sponsors = Sponsor.where(id: sponsors)
brochures = Brochure.where(id: brochures).to_a
# Send Newsletter email to the given Sponsors
sponsors.each do |sponsor|
BrochureMailer.newsletter(sponsor, brochures).deliver_later
end
redirect_back(fallback_location: admin_root_path, success: 'Newsletter sent!')
end
end
在视图中,类似这样的内容:
<% @brochures.each do |brochure| %>
<table width="280" border="0" cellpadding="0" cellspacing="0" align="left" valign="top" class="floater">
<tr>
<td align="center" valign="top">
<a target="_blank" href="<%= brochure_url(brochure) %>">
<img border="0" vspace="0" hspace="0" src="<%= brochure.image.blank? ? 'default.png' : brochure.image.url(public: true) %>" width="250" height="142">
<b><%= brochure.title %></b>
</a>
<br>
<%= brochure.description.truncate(60) %>
</td>
</tr>
</table>
<% end %>
它就像一个魅力! 我不确定这是正确的方式还是最佳方式,但只是将其视为第二种可能性。
我希望它对其他人有用。