Как создать почтовый обозреватель - PullRequest
36 голосов
/ 31 января 2011

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

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

Спасибо!

1 Ответ

76 голосов
/ 27 февраля 2011

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

По сути, ActionMailer в Rails 3 вводит использование Interceptors (вызываемых перед отправкой сообщения) и Observers (после отправки сообщения).

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

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 был лучшим источником, который я мог найти для информации об этом (они говорят только о перехватчиках, но концепция для наблюдателей та же самая).

...