在Rails 3中给出一个Mailer
实例,有没有办法覆盖它上面的delivery_method
?
我想通过高优先级传输推送某些电子邮件,而其他人则使用更繁忙,低优先级的方法。
我可以在运行时调整配置并再次将其更改回来,但这可能会产生潜在的副作用。
答案 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