2011-02-16 39 views
1


我想發送簡訊給所有註冊用戶,但只有最後一個用戶(數據庫)接收郵件。Rails 3的郵件給用戶

def letter(nletter) 
    @nletter = nletter 
    @users=Newsletter.all 
    @users.each do |users| 
    mail(:to => users.email, :subject => @nletter.subject) 
    end 
    end 

什麼問題?

回答

3

如果您向我們展示的代碼是在你的郵件程序類,它是因爲mail方法只設置了一個郵件對象的各種屬性。當你遍歷所有用戶,並呼籲mail爲每一個,你只是重置郵件對象的主題和(更重要的)接收者。因此,當函數完成併發送郵件時,當前收件人是您設置它的最後一個用戶 - 數據庫中的最後一個用戶。

你可以通過兩種不同的方式解決這個問題。如果它是一個通用的電子郵件(每個人都得到相同的確切消息),你可以通過電子郵件地址數組作爲:to

注:隨着約什在評論中指出的,你會很總是希望使用:bcc而不是:to,因此您最終不會播出您的整個郵件列表。

def letter(nletter) 
    @nletter = nletter 
    @users=Newsletter.all 
    mail(:to => @users.map(&:email), :subject => @nletter.subject) 
end 

但是,如果每個用戶得到一個自定義電子郵件("Hi, #{username}!"或諸如此類),你必須爲每個用戶創建一個新的郵件對象。你可以通過調用Mailer.deliver_letter(nletter, user)爲每個用戶做到這一點:

# Somewhere outside of your Mailer: 
nletter = "...whatever..." 
Newsletter.all.each do |user| 
    Mailer.deliver_letter(nletter, user) 
end 

# And your mailer function would look like: 
def letter(nletter, user) 
    @nletter = nletter 
    mail(:to => user.email, :subject => @nletter.subject) 
end 

希望這有助於!

+1

只是一個側面說明,如果你發送了一個通用的郵件,你應該把用戶的電子郵件地址的陣列中的BCC字段,因此電子郵件地址不要讓彼此共享。 – 2012-08-08 18:14:50