【问题标题】:Rails mail interceptor only for a specific mailerRails 邮件拦截器仅适用于特定邮件程序
【发布时间】:2017-04-21 10:43:11
【问题描述】:

我有一个拦截器:DevelopmentMailInterceptor 和一个初始化器 setup_mail.rb,用于启动拦截器。

但我想将其应用于特定的邮件(拦截NotificationMailer 而不是其他邮件。

所以我设置了setup_mail.rb

`NotificationMailer.register_interceptor(DevelopmentMailInterceptor) 

但是所有的邮件都会被拦截,就像我写的一样

ActionMailer::Base.register_interceptor(DevelopmentMailInterceptor)

如何过滤?

【问题讨论】:

    标签: ruby-on-rails actionmailer interceptor


    【解决方案1】:

    我通过深入探究邮件拦截器delivering_email方法的message参数找到了解决方案。

    class DevelopmentMailInterceptor
      def self.delivering_email(message)
    
        filteredMailers = %w[
          NotificationMailer
        ]
    
        if filteredMailers.include?(message.delivery_handler)
          message.subject = "[filter] To:#{message.to} - #{message.subject}"
          message.to = 'logs@mail.com'
        end
    
        return message
      end
    end
    

    @Intrepidd 的答案仍然正确,因为拦截器应用于整个 Mail 类,但我找到了实现我想要实现的方法。

    【讨论】:

    • 在 2018 年仍然相关,我想知道文档中的某处是否提到了这一点
    【解决方案2】:

    你不能。

    拦截器注册在全局Mail类上(见register_interceptor的源码)

    如果你需要你的拦截器只对特定的电子邮件有效,你应该在拦截器类中添加一个条件。

    【讨论】:

    • 我不能在ActionMailer 中为mail 方法设置一个默认参数来与拦截器对话吗?
    猜你喜欢
    • 2011-09-06
    • 2011-09-21
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-06
    • 2014-02-18
    • 1970-01-01
    相关资源
    最近更新 更多