Rails, как вести журнал таблицы базы данных каждый раз, когда отправляется электронное письмо - PullRequest
3 голосов
/ 07 ноября 2011

В моем приложении есть UserMailer с несколькими методами почтовой программы, большинство из которых отправляются через отложенное задание.

Я хотел бы иметь таблицу БД, которая создает запись при каждой отправке почтыиз.Приложение использует sendgrid для отправки, но я не доверяю sendgrid на 100% и хотел бы сохранить запись в приложении для отладки.

Существует ли высокоуровневый способ глобального захвата при отправке почтыи записать его в БД и не заставлять добавлять логику в когда-либо почтовый метод?

Спасибо

Ответы [ 2 ]

2 голосов
/ 07 ноября 2011

Вы можете создать класс Observer и перехватывать каждую доставку в классе AcctionMailer, регистрируя наблюдателя.

Проверьте этот ответ:

Как мне создать Mailer Observer

1 голос
/ 07 ноября 2011

Я решаю эту проблему, используя модель электронной почты с полями «to» и «guid».

def self.deliver(which, to, guid, *args)
  transaction do
    if self.where(:email => to, :guid => guid).first.nil?
      if record = Email.create(:email => to, :guid => guid, :template => which) and !record.new_record?
        Mailer.send("deliver_#{which}", to, *args)
      end
    end
  end
end

Это для почтовой программы Rails 2.3, поэтому вызов будет немного отличаться для Rails 3, но основная концепция верна. Вместо того, чтобы вызывать почтовую программу напрямую, вы будете вызывать:

Email.deliver(email_name, receipient, some_guid_you_generate_for_this_email, *args_to_be_sent_to_mailer)

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

...