ActionMailer: Default From: address?

为君一笑 提交于 2019-12-29 04:36:48

问题


Googled for this to no avail. Didn't find anything in the API either. I was expecting some kind of class method or configuration option to set it...

So, rather than calling

from "my@email.com"

for every method, it could be called automatically.


回答1:


Rails 3

config/environments/development.rb:

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

config/environments/production.rb:

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

You can also set this per mailer:

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

Rails 2

This is not supported by default. But you can achieve this functionality by using the action_mailer_callbacks plugin. Essentially this plugin allows you to add before and after filters for the deliver method.

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

end

Reference:

1) Article discussing the plugin.

OR

You can monkey patch the from method of ActionMailer::Base.

Add the code below to your 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

Now you can configure your default value as follows:

config/environments/development.rb:

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

config/environments/production.rb:

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

You can also set this per mailer:

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



回答2:


In Rails 4 you can set this in your environment(s):

config.action_mailer.default_options = {
  :from => "foo@bar.com"
}



回答3:


In Rails 3:

config/environments/development.rb:

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

config/environments/production.rb:

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



回答4:


I went with the monkey-patching method that KandadaBoggu suggested. However, it does not work quite right in Rails 2.3.8; you can't override the default. This works, however:

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


来源:https://stackoverflow.com/questions/2445100/actionmailer-default-from-address

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!