ActionMailer工作流程

时间:2012-01-03 10:10:24

标签: ruby-on-rails email actionmailer

我是Rails的新手,因此抱歉愚蠢的问题。为了发送电子邮件,我使用ActionMailer和Rails 2.3.5。语法如下

  
    

deliver_maintest1

         

deliver_maintest2

  

在ActionMailer实例模型中我有

  
    

def maintest1

         

         

def maintest2

         

  

内部定义我设置了收件人,主题,标题......据我所知,没有任何明确定义的方法邮件,这实际上是发送电子邮件。电子邮件从def maintest1和maintest2发送。问题是在发送电子邮件之前,我需要定义几个计数器,发送了多少个电子邮件,认为是maintest1和maintest2。现在考虑到我有几十个像主测试一样的defs。所以我需要一个共同的地方为所有这些defs。在您看来,什么是最好的解决方案?

谢谢!

2 个答案:

答案 0 :(得分:2)

在轨道3及以上,您可以使用observer。这些在每次邮件传递之后被调用,通过消息对象传递。您只需要实现delivered_email类方法并注册它。

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

然后,用

将其挂钩到邮件中
Mail.register_observer(EmailObserver)

这不适用于rails 2.x,它不使用mail gem(它使用来自ruby标准库的tmail。)

在2.3.x上,我会尝试像

这样的东西
class MyMailer < ActionMailer::Base
  def deliver!(mail=@mail)
    super
    # do your logging here
  end
end 

答案 1 :(得分:1)

您将调用“Mailer.deliver_maintest”将邮件发送给任何人,计算您每次拨打“Mailer.deliver_maintest”时发送特定电子邮件的时间,以便跟踪它。

您可以将该计数器存储在数据库或某处。这样的事情。

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

您还可以使用PostMark等第三方电子邮件工具发送您的电子邮件(与他们一起,您可以将每封电子邮件与标签相关联,我通常只使用这些标签来跟踪发送的电子邮件)。