仅针对特定邮件程序的Rails邮件拦截器

时间:2013-10-16 16:08:40

标签: ruby-on-rails actionmailer interceptor

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

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

所以我设置了setup_mail.rb

`NotificationMailer.register_interceptor(DevelopmentMailInterceptor) 

然后所有邮寄者都被拦截了,好像我写了

ActionMailer::Base.register_interceptor(DevelopmentMailInterceptor)

我该如何过滤?

2 个答案:

答案 0 :(得分:13)

我通过深入探索邮件拦截器的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类,但我找到了解决方法。

答案 1 :(得分:2)

你不能。

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

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