2011-09-09 31 views
3

我嘗試在單個.deliver命令中發送多個郵件。我的郵件發送方法如下所示:在一個傳遞命令中發送多個郵件?

def feedback_mail 
    @verteiler = ["[email protected]", "[email protected]"] 
    for v in @verteiler.sort 
     mail(:to => v, :subject => "Foo Bar") 
    end 
end 

問題是,只有一個郵件被髮送到數組的最後一個條目。有什麼建議嗎?

+0

你爲什麼不先準備好您的電子郵件,然後對他們的呼籲提供每個迭代? – socjopata

+0

這是因爲您將數組傳遞給':to',而不是每個電子郵件地址。 –

回答

3

這個想法不會太大 - 您需要實施類似Resque和工作人員來處理髮送所有電子郵件。

是的,@ socjopata的想法很好,但你真的想迭代將它們添加到作業隊列併產生幾個工作人員來處理它們。按照導遊,這是如何做到這一點:

class AdminMailer < ActionMailer::Base 
    default :to => ["[email protected]", "[email protected]"], 
      :from => "[email protected]" 

    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 

section 2.3.4的Rails指南:

可以通過一封電子郵件向一個或多個收件人發送電子郵件 (例如,通知所有管理員一個新的註冊),將 電子郵件列表設置爲:to鍵。電子郵件列表可以是一組電子郵件地址或單個 字符串,地址之間用逗號分隔。

回首你的嘗試,僅供參考 - 這應該工作

def feedback_mail 
    @verteiler = ["[email protected]", "[email protected]"] 
    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 => "[email protected]", 
      :return_path => "[email protected]", 
      :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 

我很肯定這個代碼是次優的,質量差,所以告誡emptor,但也許你會在這裏找到一些能夠幫助你解決你的獨特實現的東西。希望能幫助到你!

D.