代码之家  ›  专栏  ›  技术社区  ›  Augustin Riedinger

Rails邮件拦截器仅适用于特定的邮件程序

  •  6
  • Augustin Riedinger  · 技术社区  · 11 年前

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

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

    所以我开始了 设置电子邮件.rb :

    `NotificationMailer.register_interceptor(DevelopmentMailInterceptor) 
    

    但后来所有的邮件都被拦截了,就好像我写的一样

    ActionMailer::Base.register_interceptor(DevelopmentMailInterceptor)
    

    我该如何过滤?

    2 回复  |  直到 11 年前
        1
  •  15
  •   Puce    7 年前

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

    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 但我找到了实现我想要实现的目标的方法。

        2
  •  1
  •   Intrepidd    11 年前

    你不能。

    拦截器已在全局上注册 Mail 类(请参阅register_interceptor的源代码)

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