ActionMailer: По умолчанию От: адрес? - PullRequest
17 голосов
/ 15 марта 2010

гуглил по этому безрезультатно. В API тоже ничего не нашел. Я ожидал какого-то метода класса или параметра конфигурации, чтобы установить его ...

Так что вместо звонка

from "my@email.com"

для каждого метода, он может быть вызван автоматически.

Ответы [ 4 ]

53 голосов
/ 15 марта 2010

Рельсы 3

Config / окружающая среда / development.rb:

ActionMailer::Base.default :from => 'default@development-server.com'

Config / окружающая среда / production.rb:

ActionMailer::Base.default :from => 'default@production-server.com'

Вы также можете установить это для почтовой программы:

class MyMailer < ActionMailer::Base
  default :from => 'default@myapp.com'
end

Рельсы 2

Это не поддерживается по умолчанию. Но вы можете достичь этой функциональности, используя плагин action_mailer_callbacks . По сути, этот плагин позволяет добавлять фильтры before и after для метода deliver.

class FooMailer < ActionMailer::Base
  before_deliver do |mail|
    mail.from = "abc@xyz.com"
  end

end

Справка:

1) Статья Обсуждение плагина.

OR

Вы можете обезьянить патч from метод ActionMailer::Base.

Добавьте приведенный ниже код к вашему config\initializers\mail.rb

class ActionMailer::Base
  class_inheritable_hash :default
  def from_with_default(input=nil)
    return from_without_default(input) || default[:from] if input.nil?
    from_without_default(input)
  end
  alias_method_chain :from, :default
end

Теперь вы можете настроить значение по умолчанию следующим образом:

Config / окружающая среда / development.rb: * 1 042 *

ActionMailer::Base.default = {:from => 'default@development-server.com'}

Config / окружающая среда / production.rb:

ActionMailer::Base.default = {:from => 'default@production-server.com'}

Вы также можете установить это для почтовой программы:

class MyMailer < ActionMailer::Base
  self.default = {:from => 'default@myapp.com'}
end
23 голосов
/ 27 сентября 2012

В Rails 4 вы можете установить это в своей среде:

config.action_mailer.default_options = {
  :from => "foo@bar.com"
}
11 голосов
/ 20 июля 2010

In Rails 3:

Config / окружающая среда / development.rb:

ActionMailer::Base.default :from => 'default@development-server.com'

Config / окружающая среда / production.rb:

ActionMailer::Base.default :from => 'default@production-server.com'
0 голосов
/ 29 октября 2010

Я пошел с методом исправления обезьян, который предложил Кандада Боггу. Тем не менее, это не совсем правильно работает в Rails 2.3.8; Вы не можете переопределить значение по умолчанию. Это работает, однако:

def from_with_default(input=nil)
  return instance_variable_set("@from", input) unless input.nil?
  from_without_default || FROM_EMAIL
end
alias_method_chain :from, :default
...