我正在尝试拦截我的rails(3.0.10)应用中的消息以修改正文。虽然我能够找到一些关于如何做到这一点的信息,但似乎已经发生了变化,现在使用旧方法已经不再适用了。
我使用的代码如下:
class Hook
def self.delivering_email(message)
message.subject = 'Hook changed the subject'
end
end
ActionMailer::Base.register_interceptor(Hook)
发送电子邮件后,主题不会被更改!
我还发现a tweet表示在消息上使用deliver
方法时没有调用拦截器,但是premailer-rails3 gem使用了我使用的相同方法并且它在那里工作(插件特别提到它适用于deliver
方法)!
我在这里没有想法,所以是什么导致了我的问题?
答案 0 :(得分:5)
听起来这可能是一个操作顺序问题。
您是否考虑过将您引用的整个代码块放在config/initializers/mail_hook.rb
等初始值设定项中?
如果预编译插件有效,我唯一能想到的就是在应用初始化过程中注册了拦截挂钩。
答案 1 :(得分:5)
参见RailsCast或AsciiCast第206集
http://railscasts.com/episodes/206-action-mailer-in-rails-3
http://asciicasts.com/episodes/206-action-mailer-in-rails-3
第一集的相关部分,
<强> /lib/development_mail_interceptor.rb 强>
class DevelopmentMailInterceptor
def self.delivering_email(message)
message.subject = "[#{message.to}] #{message.subject}"
message.to = "eifion@asciicasts.com"
end
end
<强> /config/initializers/setup_mail.rb 强>
Mail.register_interceptor(DevelopmentMailInterceptor) if Rails.env.development?