我尝试在一个.deliver
命令中发送多封邮件。我的邮件程序方法如下:
def feedback_mail
@verteiler = ["foo@bar.com", "bar@foo.com"]
for v in @verteiler.sort
mail(:to => v, :subject => "Foo Bar")
end
end
问题是,只有一封邮件被发送到数组的最后一个条目。有什么建议吗?
答案 0 :(得分:3)
这个想法不会扩展太多 - 你需要实现类似Resque
和工作人员的工作来处理发送所有电子邮件。
是的,@ socjopata的想法很好,但你真的想迭代将它们添加到作业队列并产生几个工人来处理它们。根据指南,这是如何做到的:
class AdminMailer < ActionMailer::Base
default :to => ["foo@bar.com", "bar@foo.com"],
:from => "notification@example.com"
def new_registration(user)
@user = user
mail(:subject => "New User Signup: #{@user.email}")
end
end
我基本上将YourMailer.feedback_mail(<PASS ARGS HERE>).deliver
交给Resque -
Resque.enqueue(SendMail, <ARGS>) # replace this in your controller
工人看起来像
#send_mail.rb
class SendMail
@queue = :feedback_mail_queue
def self.perform(<ARGS>) # pass these in enqueue call
YourMailer.feedback_mail(<PASS ARGS HERE>).deliver
end
end
根据Rails指南的section 2.3.4:
可以通过一封电子邮件向一个或多个收件人发送电子邮件 (例如,通过设置列表来通知所有管理员新的注册) 发送电子邮件至:to key。电子邮件列表可以是一组电子邮件地址或单个电子邮件地址 字符串,地址以逗号分隔。
回顾你的尝试,仅供参考 - 这应该有效
def feedback_mail
@verteiler = ["foo@bar.com", "bar@foo.com"]
mail(:to => @verteiler, :subject => "Foo Bar")
end
答案 1 :(得分:1)
这让我花了1-2周的时间来理解,所以希望这段代码会让你知道该怎么做。
这是我的列表控制器,我生成要发送给邮件的消息:
def messages
@list = List.find(params[:id])
#@message = Message.new( :user_id => @list.user.id, :list_id => @list.id,
#:subject => params[:subject], :body => params[:body] )
@message = Message.new(params[:message])
@contacts = @list.contacts
respond_to do |format|
if @list.save && @message.save
#Blaster is my mailer, and blast is the send method in the blaster.rb mailer
Blaster.blast(@message, @contacts)
format.html {
redirect_to @list, notice: 'Message was saved.' }
format.json { render json: @list, status: :created, location: @list }
else
format.html { redirect_to @list, notice: 'There was an error, try again'}
format.json { render json: @list.errors, status: :unprocessable_entity }
end
end
端
======
这是我的邮件 - 它叫做blast.rb
def blast(message, contacts)
# can't send without a message, and an array of contacts
@message = message
@contacts = contacts
# with variables set, let's create the loop to do its magic
@contacts.each do |contact|
mail = mail(
:to => "#{contact.email}",
:from => "noreply@foo.org",
:return_path => "noreply@foo.org",
:subject => @message.subject,
:body => @message.body
#:template_path => 'blaster',
#:template_name => 'blast'
) do |format|
format.html { render 'blast.html.erb'}
format.text { render 'blast.text.erb'}
end
mail.deliver
end # contacts.each loop
end #blast method
我很确定这段代码是次优的,而且质量很差,所以你可以在这里找到一些可以帮助你解决你的独特实现的东西。希望能帮助到你!
d。