如何创建Mailer Observer

时间:2011-01-31 11:45:43

标签: ruby-on-rails-3 observer-pattern actionmailer

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:76)

我很惊讶Rails的文档中有这么一点。

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

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

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

ActionMailer::Base.register_observer(MailObserver)

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

要注册拦截器,请执行与上述相同的操作,将register_observer替换为register_interceptor,并将方法从self.delivered_email重命名为self.delivering_email

This Railscast是我能找到的关于此信息的最佳来源(他们只谈论拦截器,但观察者的概念是相同的)。