2012-03-02 17 views
5

我目前遇到了從ActionMailer發送電子郵件的問題。我試圖將自定義頭附加到從我的系統發送的每封電子郵件中,而不管它來自哪個郵件程序。標題包含有關哪個人正在接收電子郵件的信息,因此它不能在郵件程序的默認設置中進行設置,但我希望避免在每個郵件程序中設置此標題。修改由ActionMailer返回的Mail :: Message的標頭

以下是我已經設置了當前:

candidates.each do |c| 
    mail = mailer_class.send(action.to_sym, c, params) 
    recip = email_recipients.create!(:contact => c, :subject => mail.subject) 

    mail.headers['X-SMTPAPI'] = {:unique_args => {:email_recipient_id => recip.id, :database => Apartment::Database.current_database }, 
           :category => "#{mailer}-#{action}" }.to_json 

    mail.deliver 
    end 

的問題是,設置在headers哈希Mail::Message的關鍵似乎並沒有改變任何東西。

我沒有找到一個方式通過手動設置標頭屬性,像這樣設置一個標題:

m.header = m.header.to_s + "\nBlah: Blah" 

但說實話,這種感覺有點哈克。有誰知道有更好的模式來完成這個嗎?

+0

你是否通過smtp頭髮送json? – farnoy 2012-03-02 15:32:35

+0

是的。有點奇怪,但這是由我使用的提供商支配的。 – 2012-03-02 15:36:09

回答

0

您可以創建一個使用默認頭延伸的ActionMailer :: Base的一類

初始化

目錄添加被加載的文件看起來像

mailer_defaults.rb

class ActionMailer::Base 
    def defaults 
     # header HERE 
    end 
end 

這應該帶你走在正確的方向