How do I create a Mailer Observer
I'd like to run some code whenever an email is sent on my app.
As ActionMailer doesn't support after_filter, I would like to use 开发者_开发问答an observer.
The Rails docs mention this in passing, however does not elaborate.
Thanks!
I'm surprised how little there is in Rails' documentation about this.
Basically, ActionMailer in Rails 3 introduces the use of Interceptors (called before the message is sent) and Observers (after the message is sent).
To set up an Observer, add the following to an initializer:
class MailObserver
def self.delivered_email(message)
# Do whatever you want with the message in here
end
end
ActionMailer::Base.register_observer(MailObserver)
Now, the delivered_email
method will run every time your app sends an e-mail. However, you will only have access to the actual Mail
message.
To register an Interceptor instead, do the same as above, replacing register_observer
with register_interceptor
, and renaming the method from self.delivered_email
to self.delivering_email
.
This Railscast was the best source I could find for info on this (they only talk about interceptors, but the concept is the same for observers).
精彩评论