6

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

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

所以我设置setup_mail.rb

`NotificationMailer.register_interceptor(DevelopmentMailInterceptor) 

但随后所有的邮件都被拦截了,好像我写的

ActionMailer::Base.register_interceptor(DevelopmentMailInterceptor)

我该如何过滤这个?

4

2 回答 2

15

我通过深入探究邮件拦截器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班级,但我找到了实现我想要实现的方法。

于 2013-10-17T10:15:23.733 回答
1

你不能。

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

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

于 2013-10-16T16:23:51.333 回答