我想为所有邮件设置标头值。我想在拦截器中执行它,这样我就不必为所有邮件重复代码了。
如果我在邮件程序功能中执行此操作,代码将如下所示,
headers['X-Mailgun-Campaign-Id'] = "1234"
但是如何使用拦截器实现相同的目标?
答案 0 :(得分:5)
我在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
答案 1 :(得分:1)
如果有人发现这个寻找相同的答案,那就是如何覆盖拦截器中的现有标头,这就是我最终使用的内容。
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"
标头内部存储在数组中,而不是哈希,因此为了“覆盖”,您必须先完全删除标头。否则你的“覆盖”实际上只会添加另一个具有相同名称的标题,而且很难知道如何在另一端处理它。