【问题标题】:ActionMailer workflowActionMailer 工作流程
【发布时间】:2012-02-01 09:29:20
【问题描述】:

我是 Rails 的新手,因此很抱歉提出愚蠢的问题。对于发送电子邮件,我使用带有 Rails 2.3.5 的 ActionMailer。语法如下

deliver_maintest1

deliver_maintest2

在我拥有的 ActionMailer 实例模型中

def maintest1

结束

def maintest2

结束

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

谢谢!

【问题讨论】:

    标签: ruby-on-rails email actionmailer


    【解决方案1】:

    在 Rails 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 
    

    【讨论】:

    • D'oh,刚刚意识到您在 rails 2.3 - 以上仅适用于 rails >= 3。在 rails 2 上,您可以尝试覆盖邮件程序上的交付方法
    • 谢谢,我不确定 ActionMailer 中是否有 def Deliver。你知道如何为 ActionMailer 定义 after_filter 吗?
    • 就像 Frederick 说的那样,“def Deliver”本来可以在 rails 3+ 上工作
    【解决方案2】:

    您将调用 "Mailer.deliver_maintest" 将邮件发送给任何人,以计算您发送特定电子邮件的次数,您只需在每次调用 "Mailer.deliver_maintest" 时跟踪它。

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

    // 为邮件程序更新计数器的一些代码行 Mailer.deliver_maintest

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

    【讨论】:

    • 非常感谢,但我有几十个(maintest1,maintest...)。我不想在 maintest 之外更改计数器。我想应该有更方便的东西。我去看看邮戳
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多