修改ActionMailer返回的Mail :: Message的标头

时间:2012-03-02 15:03:01

标签: ruby-on-rails ruby actionmailer

我目前遇到了从ActionMailer发送电子邮件的问题。我试图在我的系统发送的每封电子邮件上附加一个自定义标题,无论它来自哪个邮件程序。标题包含有关哪个人正在接收电子邮件的信息,因此无法在邮件的默认设置中设置,但我希望避免在每个邮件中设置此标题。

这是我目前设置的内容:

  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的{​​{1}}哈希上设置密钥似乎没有任何改变。

我确实找到了一种通过手动设置header属性来设置标头的方法,如下所示:

Mail::Message

但说实话,这感觉有点黑客。有谁知道一个更好的模式来实现这个目标?

1 个答案:

答案 0 :(得分:0)

您可以使用默认标题

创建一个扩展ActionMailer :: Base的类 初始化程序目录中的

添加一个看起来像

的加载文件

<强> mailer_defaults.rb

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

这会带你走正确的方向