我实际上正在创建一个时事通讯群发软件,我可以从中即时创建一个新的邮件列表,上传一个模板,然后从该列表中向订阅者发送一封电子邮件,执行如下操作:
@suscribers.each do |suscriber|
NewsletterMailer.delay.send("#{@list.name}_newsletter", suscriber, @newsletter)
end
(请注意,延迟方法是因为我在后台作业中使用了sidekiq)
我试图覆盖 NewsletterMailer 类中 ActionMailer::Base 的 method_missing 来处理这个逻辑,但它似乎没有被执行。我刚刚收到一个 NoMethodError,说“NewsletterMailer:Class 的未定义方法 `testing_newsletter'”。
我查看了 ActionMailer::Base#method_missing 源代码,发现它已经在执行一些逻辑,因此我们可以在不调用 new 的情况下执行 Mailer.name_of_the_email.deliver。此外,此方法受到保护。
但是,有没有办法我仍然可以从我的 NewsletterMailer 类中未硬编码的方法发送电子邮件?有没有办法将方法动态添加到 ActionMailer 控制器?
非常感谢。