如果您向我們展示的代碼是在你的郵件程序類,它是因爲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
希望這有助於!
只是一個側面說明,如果你發送了一個通用的郵件,你應該把用戶的電子郵件地址的陣列中的BCC字段,因此電子郵件地址不要讓彼此共享。 – 2012-08-08 18:14:50