ActionMailer:默认来自:地址?

时间:2010-03-15 04:35:15

标签: ruby-on-rails actionmailer

用Google搜索无效。在API中也没有找到任何东西。我期待某种类方法或配置选项来设置它......

所以,而不是打电话

from "my@email.com"

对于每种方法,都可以自动调用。

6 个答案:

答案 0 :(得分:53)

Rails 3

配置/环境/ development.rb:

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

配置/环境/ production.rb:

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

您还可以为每封邮件设置:

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

Rails 2

默认情况下不支持此功能。但是您可以使用action_mailer_callbacks插件来实现此功能。基本上,此插件允许您为before方法添加afterdeliver过滤器。

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

end

<强>参考:

1)Article讨论插件。

或者

您可以修补from的{​​{1}}方法。

将以下代码添加到ActionMailer::Base

config\initializers\mail.rb

现在您可以按如下方式配置默认值:

配置/环境/ development.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

配置/环境/ production.rb:

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

您还可以为每封邮件设置:

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

答案 1 :(得分:23)

在Rails 4中,您可以在您的环境中设置:

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

答案 2 :(得分:11)

在Rails 3中:

配置/环境/ development.rb:

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

配置/环境/ production.rb:

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

答案 3 :(得分:0)

我选择了KandadaBoggu建议的猴子修补方法。但是,它在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

答案 4 :(得分:0)

.. Rails-6有变化吗?

config.action_mailer.default_options = { from: 'noreply@xxx.xx' }

在production.rb中不起作用

答案 5 :(得分:0)

Ruby 5和6

config / environments / $ RAILS_ENV.rb
config.action_mailer.default_options = {来自:“ no-reply@example.com”}