Подтвердить что ты не робот

Как создать Mailer Observer

Я хотел бы запускать некоторый код всякий раз, когда в мое приложение отправляется электронное письмо.

Поскольку ActionMailer не поддерживает after_filter, я бы хотел использовать наблюдателя.

В документах Rails упоминается об этом мимоходом, однако не уточняется.

Спасибо!

4b9b3361

Ответ 1

Я удивлен, как мало в документации Rails об этом.

В основном ActionMailer в Rails 3 вводит использование перехватчиков (вызываемых до отправки сообщения) и наблюдателей (после отправки сообщения).

Чтобы настроить Обозреватель, добавьте следующее в инициализатор:

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.

Этот Railscast был лучшим источником, который я мог найти для информации об этом (они говорят только о перехватчиках, но концепция для наблюдателей одинакова).