【问题标题】:Is it possible to have a mail Observer that handle only a specific Mailer?是否有可能有一个只处理特定邮件程序的邮件观察者?
【发布时间】:2013-03-28 01:05:15
【问题描述】:

是否可以有一个只处理特定邮件程序的邮件观察者?

这样我们就可以有不同的邮件程序 - 邮件观察者对,在他们的邮件发送后共同处理任务。

例如,一个邮件观察者可以删除临时生成的附件,而另一个可以记录某些特定类型的消息(特定邮件)的发送。

如果可能,您能否说明我们如何在邮件程序和邮件观察器类之间建立“连接”?

非常感谢

【问题讨论】:

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


    【解决方案1】:

    我发现了一些例子告诉我把它放到 config/initializers/ 中的任何文件中:

    ActionMailer::Base.register_observer(MyMailObserver)
    

    但这是一个全局设置。

    我在深入了解api 后找到了解决方案。 我意识到 register_observer() 是一个类方法,所以我尝试将它应用于我的 app/mailer/report_mailer.rb 类:

    class ReportMailer < ActionMailer::Base
      default from: "my_email@my_domaine.com"
    
      def monthly_report(user, report_name, file_name, file_path)
        @user = user
        @report_name = report_name
        attachments[file_name] = File.read(file_path)
        mail(:to => user.email, :subject => "Generated report for #{report_name} (automatic message)")
      end
    end
    

    我设法在 config/initializers/my_mailer_observer_initializer.rb 中为我的邮件程序初始化了我的观察者:

    ReportMailer.register_observer(MyMailObserver)
    

    所以我得到了 MyMailerObserver 与我的 ReportMailer 类而不是其他 Mailer 类的关系。

    【讨论】:

    猜你喜欢
    • 2015-11-04
    • 2019-10-27
    • 2011-06-18
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-10
    相关资源
    最近更新 更多