2012-01-03 2 views
0

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

deliver_maintest1

deliver_maintest2

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

Защиту maintest1

конец

Защиту maintest2

концевых

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

Спасибо!

ответ

2

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

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

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

Mail.register_observer(EmailObserver) 

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

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

class MyMailer < ActionMailer::Base 
    def deliver!([email protected]) 
    super 
    # do your logging here 
    end 
end 
+0

D'oh, только что понял, что вы на рельсах 2.3 - вышесказанное применимо только к rails> = 3. На рельсах 2 вы можете попробовать переопределить метод доставки на своем почтовом ящике –

+0

Спасибо, я не уверен, что в ActionMailer есть def. Вы знаете, как я могу определить after_filter для ActionMailer? – com

+0

Как сказал Фредерик, «def deliver» работал бы на рельсах 3+ –

1

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

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

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

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

+0

спасибо, но у меня есть десятки из них (maintest1, maintest ...). Я не хочу менять счетчик вне maintest. Я думал, что должно быть что-то более удобное. Я посмотрю PostMark – com

Смежные вопросы