我有一些ActionMailer类可以发送大量的电子邮件....我希望在这个Rails应用程序发送的每封电子邮件中全局包含一个标题:
以下是手动包含标题的方法:
class GeneralNotification < ActionMailer::Base
def test_email(emails)
subject "Welcome to my email!"
recipients "somebody@somewhere.com"
from "chad@awesome.com"
headers(
"X-SMTPAPI" => '{"category": "Test Category"}'
)
end
end
我希望全局包含X-SMTPAPI标头,而不修改每个邮件程序方法..
最好的方法是什么?
谢谢!
乍得
答案 0 :(得分:2)
ActionMailer::Base.default "X-SMTPAPI" => '{"category": "Test Category"}'
这将 NOT 工作:
config.action_mailer.default "X-SMTPAPI" => '{"category": "Test Category"}' # DOES NOT WORK
答案 1 :(得分:1)
遗憾的是,您似乎没有使用Rails 3,它有一个新的ActionMailer::Base.default
方法,您可以使用它在application.rb中设置它。 编辑:我没注意到你说它是标题中的第3轨。在这种情况下,请将其添加到config / application.rb中的配置块:
config.action_mailer.default "X-SMTPAPI" => '{"category": "Test Category"}'
对于Rails 2.x,你有两个选择;使用action_mailer_callbacks之类的插件在初始化程序中定义一个before_filter样式调用来设置标题,或者使用猴子路径动作管理器来使它做你想做的事。我担心,这两种解决方案都不是特别优雅。
Here's一个很好的例子,有人想要做同样的事情,以及你如何修补AM,但是使用from地址而不是标题。
答案 2 :(得分:0)
您可以定义一个超类来定义此方法以简单地设置标题:
class MailBase < ActionMailer::Base
def test_email
# sendgrid headers go here
end
end
然后你让你的类继承自这个类:
class MailSub < MailBase
def test_email
# email stuff goes here
super
end
end
此处super
方法调用将调用超类中的test_email
方法,从而添加Sendgrid标头。