【问题标题】:Rails3 Global Header InclusionRails3 全局头文件包含
【发布时间】:2012-01-06 08:22:57
【问题描述】:

我有几个 ActionMailer 类可以发送大量电子邮件......我想在从这个 Rails 应用程序发送的每封电子邮件中全局包含一个标题:

这是一个手动包含标题的方法:

class GeneralNotification < ActionMailer::Base

    def test_email(emails)
        subject "Welcome to my email!"
        recipients "somebody@somewhere.com"
        from "chad@awesome.com"

        headers(
            "X-SMTPAPI" => '{"category": "Test Category"}'
        )
    end

end

我希望在不修改每个邮件方法的情况下全局包含 X-SMTPAPI 标头..

最好的方法是什么?

谢谢!

乍得

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:
    ActionMailer::Base.default "X-SMTPAPI" => '{"category": "Test Category"}'
    

    这将工作:

    config.action_mailer.default "X-SMTPAPI" => '{"category": "Test Category"}' # DOES NOT WORK
    

    【讨论】:

    【解决方案2】:

    很遗憾,您似乎没有使用 Rails 3,它有一个新的 ActionMailer::Base.default 方法,您可以使用它在 application.rb 中设置它。 编辑:我没有注意到你在标题中说它是 rails 3。在这种情况下,将其添加到 config/application.rb 中的配置块中:

    config.action_mailer.default "X-SMTPAPI" => '{"category": "Test Category"}'
    

    对于 Rails 2.x,您有两种选择;使用诸如action_mailer_callbacks 之类的插件在初始化程序中定义 before_filter 样式调用以设置标题,或使用monkey-path actionmailer 使其执行您想要的操作。恐怕都不是特别优雅的解决方案。

    Here's 一个很好的例子,说明有人想要做同样的事情,以及如何对 AM 进行猴子补丁,但使用发件人地址而不是标题。

    【讨论】:

    • 谢谢,是的,我正在使用 Rails 3 - 但是在将这个配置添加到我的 application.rb 之后 - 它仍然没有添加标题。有什么建议吗?
    • 刚刚在应用程序中进行了一些尝试,我无法使用config.action_mailer.default "X-SMTPAPI" =&gt; '{"category": "Test Category"}' 使其工作,但可以使用ActionMailer::Base.default "X-SMTPAPI" =&gt; '{"category": "Test Category"}'。嗯。奇怪的。我会认为它的行为方式与其他配置选项相同......
    • 完美!!这也为我解决了问题。
    • 所以标头的值是一个字符串(由于它的 JSON,它恰好看起来像一个 Ruby 1.9 哈希)而不是一个哈希?
    【解决方案3】:

    你可以定义一个超类来定义这个方法来简单地设置标题:

    class MailBase < ActionMailer::Base
      def test_email
        # sendgrid headers go here
      end
    end
    

    然后你让你的类继承这个类:

    class MailSub < MailBase
      def test_email
        # email stuff goes here
        super
      end
     end
    

    这里的super方法调用会调用超类中的test_email方法,从而添加了Sendgrid headers。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      • 1970-01-01
      • 2011-03-28
      • 1970-01-01
      • 2020-02-20
      相关资源
      最近更新 更多