Как перехватить сообщения ActionMailer на рельсах 3? - PullRequest
3 голосов
/ 01 сентября 2011

Я пытаюсь перехватить сообщения в моем приложении rails (3.0.10), чтобы изменить тело. Хотя мне удалось найти некоторую информацию о том, как это сделать, похоже, что-то изменилось, и теперь использование старых методов больше не работает.

Я использую код, который выглядит следующим образом:

class Hook
  def self.delivering_email(message)
    message.subject = 'Hook changed the subject'
  end
end

ActionMailer::Base.register_interceptor(Hook)

После отправки письма тема не меняется!

Я также нашел твит , который указывает, что перехватчики не вызываются при использовании метода deliver для сообщений, но гем premailer-rails3 использует тот же подход, который я использовал и это работает там (плагин определенно упоминает, что это работает с deliver методом)!

У меня нет идей, так в чем причина моей проблемы?

Ответы [ 2 ]

5 голосов
/ 02 сентября 2011

см. RailsCast или AsciiCast Episode # 206

http://railscasts.com/episodes/206-action-mailer-in-rails-3

http://asciicasts.com/episodes/206-action-mailer-in-rails-3

Соответствующая часть из первого эпизода,

/ Библиотека / development_mail_interceptor.rb

class DevelopmentMailInterceptor
  def self.delivering_email(message)
    message.subject = "[#{message.to}] #{message.subject}"
    message.to = "eifion@asciicasts.com"
  end
end

/ конфигурации / Инициализаторы / setup_mail.rb

Mail.register_interceptor(DevelopmentMailInterceptor) if Rails.env.development?
5 голосов
/ 01 сентября 2011

Похоже, что это может быть проблема порядка операций.

Рассматривали ли вы возможность помещения всего блока кода, на который вы ссылаетесь, в инициализаторе, например config/initializers/mail_hook.rb?

Если этот плагин premailer работаетединственное различие, о котором я могу думать, это когда перехват перехвата регистрируется в процессе инициализации приложения.

...