我想为所有邮件设置一个标题值。我想在拦截器中执行此操作,这样我就不必为所有邮件重复代码。
如果我在 mailer 函数中执行此操作,代码将如下所示,
headers['X-Mailgun-Campaign-Id'] = "1234"
但是我如何使用拦截器来实现相同的目标?
我想为所有邮件设置一个标题值。我想在拦截器中执行此操作,这样我就不必为所有邮件重复代码。
如果我在 mailer 函数中执行此操作,代码将如下所示,
headers['X-Mailgun-Campaign-Id'] = "1234"
但是我如何使用拦截器来实现相同的目标?
我在 ActionMailer 拦截器中设置自定义标头时遇到了类似的问题。邮件中使用的标准语法不起作用:
def self.delivering_email(message)
message.headers['X-Mailgun-Campaign-Id'] = "1234"
end
...但是源代码中提到的这种哈希样式语法确实有效:
def self.delivering_email(message)
message.headers 'X-Mailgun-Campaign-Id' => "1234"
end
如果有人发现这个正在寻找与我相同的答案,即如何覆盖拦截器中的现有标头,这就是我最终使用的答案。
message.header.fields.select{|f| f.name == 'X-Custom-Header' }
.each{|f| message.header.fields.delete(f) }
// these two following lines work equivalently in Rails 4:
message.headers['X-Custom-Header'] = "1234"
message.header 'X-Custom-Header' => "1234"
标头内部存储在数组中,而不是散列中,因此为了“覆盖”,您必须首先完全删除标头。否则,您的“覆盖”实际上只会添加另一个具有相同名称的标头,并且很难知道在另一端将如何处理。