如何创建Mailer Observer

tho*_*edb 36 actionmailer observer-pattern ruby-on-rails-3

每当我的应用程序发送电子邮件时,我都想运行一些代码.

由于ActionMailer不支持after_filter,我想使用观察者.

Rails文档顺便提一下,但没有详细说明.

谢谢!

Dyl*_*kow 76

我很惊讶Rails的文档中有这么多.

基本上,Rails 3中的ActionMailer引入了Interceptor的使用(在发送消息之前调用)和Observers(在消息发送之后).

要设置Observer,请将以下内容添加到初始值设定项:

class MailObserver
  def self.delivered_email(message)
    # Do whatever you want with the message in here
  end
end

ActionMailer::Base.register_observer(MailObserver)
Run Code Online (Sandbox Code Playgroud)

现在,该delivered_email方法将在您的应用每次发送电子邮件时运行.但是,您只能访问实际的Mail消息.

要注册Interceptor,请执行与上面相同的操作,替换register_observerregister_interceptor,并将方法重命名self.delivered_emailself.delivering_email.

这个Railscast是我能找到的最好的信息来源(他们只讨论拦截器,但观察者的概念是相同的).

  • 这引出了一些问题 - (1)你如何判断使用哪种邮件和使用哪种方法,(2)你会如何观察失败?(3)你将如何测试这一点,包括失败案例? (15认同)