Использовать другой метод delivery_method с ActionMailer только для одного письма? - PullRequest
6 голосов
/ 27 августа 2011

Учитывая экземпляр Mailer в Rails 3, есть ли способ переопределить delivery_method на нем?

Я хочу отправить определенные письма через высокоприоритетный транспорт, а другие используютболее загруженный метод с низким приоритетом.

Я могу настроить конфигурацию во время выполнения и снова изменить ее, но это чревато потенциальными побочными эффектами.

Ответы [ 2 ]

6 голосов
/ 28 августа 2011

Оказывается, что это влияет только на этот конкретный почтовик, не изменяя глобально 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

Это не похоже на документирование, но работает.

0 голосов
/ 27 августа 2011

Раньше я делал это в приложении на 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
...