Рабочий процесс ActionMailer - PullRequest
       1

Рабочий процесс ActionMailer

0 голосов
/ 03 января 2012

Я новичок в Rails, поэтому прошу прощения за глупый вопрос.Для отправки писем я использую ActionMailer с Rails 2.3.5.Синтаксис следующий

delivery_maintest1

delivery_maintest2

в модели экземпляра ActionMailer у меня есть

def maintest1

end

def maintest2

end

Внутри определений я задаю получателя, тему,Заголовки, ... Как я понимаю, не существует какого-либо определенного метода определения mail , который фактически отправляет электронную почту.Письма отправляются с def maintest1 и maintest2.Проблема в том, что перед отправкой электронной почты мне нужно определить несколько счетчиков, сколько писем было отправлено, подумав maintest1 и maintest2.Теперь учтите, что у меня десятки определений, как у maintest.Поэтому мне нужно общее место для всех этих защит.На ваш взгляд, какое решение лучше?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 03 января 2012

На рельсах 3 и выше вы можете использовать observer. Они вызываются после каждой доставки почты, проходящей через объект сообщения. Вам просто нужно реализовать метод класса delivered_email и зарегистрировать его.

class EmailObserver
  def self.delivered_email(message)
    # do something with message
  end
end

Затем подключите его к почте с помощью

Mail.register_observer(EmailObserver)

Это не работает на rails 2.x, который не использует гем почты (он использует tmail из стандартной библиотеки ruby.)

На 2.3.x я бы попробовал что-то вроде

class MyMailer < ActionMailer::Base
  def deliver!(mail=@mail)
    super
    # do your logging here
  end
end 
1 голос
/ 03 января 2012

Вы будете звонить «Mailer.deliver_maintest», чтобы отправлять письма кому угодно, чтобы подсчитать, сколько раз вы отправляли конкретное письмо, вам просто нужно отслеживать его каждый раз, когда вы вызываете «Mailer.deliver_maintest».

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

  // Some lines of code to Update the counter for the mailer
  Mailer.deliver_maintest

Вы также можете использовать стороннюю почтовую программу, например PostMark, для отправки вашей электронной почты (с ними вы можете связывать каждое письмо с тегами, и я просто использую эти теги для отслеживания отправленных писем),

...