使用与ActionMailer不同的delivery_method只用于一封电子邮件?

时间:2011-08-27 10:57:27

标签: ruby-on-rails actionmailer

在Rails 3中给出一个Mailer实例,有没有办法覆盖它上面的delivery_method

我想通过高优先级传输推送某些电子邮件,而其他人则使用更繁忙,低优先级的方法。

我可以在运行时调整配置并再次将其更改回来,但这可能会产生潜在的副作用。

2 个答案:

答案 0 :(得分:6)

事实证明,这样做只影响这个特定的邮件程序,而不会全局更改ActionMailer::Base

class SomeMailer < ActionMailer::Base
  self.delivery_method = :high_priority  

  def some_email(params)
  end
end

如果你预先有实例,你也可以这样做(警告:会影响AnotherMailer的所有实例):

mail = AnotherMailer.whatever_email
mail.delivery_handler.delivery_method = :something_else

这些似乎没有记录,但是工作。

答案 1 :(得分:0)

我曾经在Rails 2应用程序中这样做,其中一些电子邮件是通过ActionMailer发送的,其他电子邮件是通过ArMailer发送的。只要您不在相同的交付中更改交付方法,这不是一个糟糕的解决方案,因为它可能导致交付方法在交付错误的情况下不被更改,这就是我所做的:

class Mailer1

  def my_mail1
    config
  end

private

  def config 
    ActionMailer::Base.delivery_method = :smtp
  end

end


class Mailer2

  def my_mail2
    config
  end

private

  def config 
    ActionMailer::Base.delivery_method = :sendmail
  end

end