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

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

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

所以我在setup_mail.rb设置:

 `NotificationMailer.register_interceptor(DevelopmentMailInterceptor) 

但随后所有邮寄者都被拦截了,就像我写的一样

 ActionMailer::Base.register_interceptor(DevelopmentMailInterceptor) 

我该如何过滤这个?

我通过深入探索邮件拦截器的deliver_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类,但我找到了想要达到的目标。

你不能。

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

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

Interesting Posts