(ActionMailer)消息对象的delivery_handler属性

时间:2013-10-20 12:42:04

标签: ruby ruby-on-rails-3.2 actionmailer interceptor

有人可以向我解释在哪里可以找到有关属性 delivery_handler 的具体说明吗?什么样的对象?一串?或者其他什么?

以及该指令的工作原理:

filteredMailers.include?(message.delivery_handler)

我是从这个邮件观察员context中获取的:

class DevelopmentMailInterceptor
  def self.delivering_email(message)

    filteredMailers = %w[
      NotificationMailer
    ]

    if filteredMailers.include?(message.delivery_handler)
      message.subject = "[filter] To:#{message.to} - #{message.subjec}"
      message.to = 'logs@mail.com'
    end

    return message
  end
end

我为消息类找到了这个reference,但是对于什么类型的对象是delivery_handler仍然非常困惑。

欢迎任何帮助。 谢谢你的解释。

1 个答案:

答案 0 :(得分:0)

记录在https://github.com/mikel/mail/blob/2.6.1/lib/mail/message.rb#L138

您应该为其分配一个实现deliver_mail方法的类,该方法可以/应该执行以下任何操作(引自上面的链接):

# * Appending the mail object to Mail.deliveries as you see fit.
# * Checking the mail.perform_deliveries flag to decide if you should
#   actually call :deliver! the mail object or not.
# * Checking the mail.raise_delivery_errors flag to decide if you
#   should raise delivery errors if they occur.
# * Actually calling :deliver! (with the bang) on the mail object to
#   get it to deliver itself.

您也可以拨打deliver!,而不是拨打yield,这会告诉Mail调用自己的私有do_delivery方法。

ActionMailer为其分配邮件程序类(即class MyMailer < ActionMailer::Basesource中的MyMailer,然后依赖于ActionMailer::Base delivery_mail的实现(除非您选择覆盖它) )。