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

Rya*_*ner 5 ruby ruby-on-rails 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
Run Code Online (Sandbox Code Playgroud)

问题是,在a的headers哈希上设置一个键Mail::Message似乎没有改变任何东西.

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

m.header = m.header.to_s + "\nBlah: Blah"
Run Code Online (Sandbox Code Playgroud)

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

MZa*_*oza 0

您可以创建一个使用默认标头扩展 ActionMailer::Base 的类

初始化目录中添加一个加载的文件,如下所示

mailer_defaults.rb

  class ActionMailer::Base
    def defaults
      # header HERE 
    end
 end
Run Code Online (Sandbox Code Playgroud)

这应该会带你走向正确的方向