module Spamotron module ActionMailer def self.included(base) base.extend(ClassMethods) super end module ClassMethods def queue(mail) new.queue!(mail) end end def queue!(mail = @mail) source = mail.to_s Spamotron.queue(source) logger.info("[Spamotron] Queuing mail:\n#{source}") end end end class ActionMailer::Base class << self def method_missing(method_symbol, *parameters)#:nodoc: case method_symbol.id2name when /^create_([_a-z]\w*)/ then new($1, *parameters).mail when /^deliver_([_a-z]\w*)/ then new($1, *parameters).queue! when "new" then nil else super end end end end