ActionMailer:默认来自:地址?

Ale*_*dre 17 ruby-on-rails actionmailer

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

所以,而不是打电话

from "my@email.com"
Run Code Online (Sandbox Code Playgroud)

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

Har*_*tty 53

Rails 3

配置/环境/ development.rb:

ActionMailer::Base.default :from => 'default@development-server.com'
Run Code Online (Sandbox Code Playgroud)

配置/环境/ production.rb:

ActionMailer::Base.default :from => 'default@production-server.com'
Run Code Online (Sandbox Code Playgroud)

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

class MyMailer < ActionMailer::Base
  default :from => 'default@myapp.com'
end
Run Code Online (Sandbox Code Playgroud)

Rails 2

默认情况下不支持此功能.但是您可以使用action_mailer_callbacks插件来实现此功能.本质上,这个插件允许您为方法添加beforeafter过滤deliver.

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

end
Run Code Online (Sandbox Code Playgroud)

参考:

1)在讨论插件.

要么

你可以修补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
Run Code Online (Sandbox Code Playgroud)

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

配置/环境/ development.rb:

ActionMailer::Base.default = {:from => 'default@development-server.com'}
Run Code Online (Sandbox Code Playgroud)

配置/环境/ production.rb:

ActionMailer::Base.default = {:from => 'default@production-server.com'}
Run Code Online (Sandbox Code Playgroud)

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

class MyMailer < ActionMailer::Base
  self.default = {:from => 'default@myapp.com'}
end
Run Code Online (Sandbox Code Playgroud)


Jak*_*ake 23

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

config.action_mailer.default_options = {
  :from => "foo@bar.com"
}
Run Code Online (Sandbox Code Playgroud)

  • 看来,`default_options =`已经在Rails 4中添加为`ActionMailer :: Base.default`的别名.但是在Rails 3.2.12中,它不可用. (8认同)

Vin*_*ent 11

在Rails 3中:

配置/环境/ development.rb:

ActionMailer::Base.default :from => 'default@development-server.com'
Run Code Online (Sandbox Code Playgroud)

配置/环境/ production.rb:

ActionMailer::Base.default :from => 'default@production-server.com'
Run Code Online (Sandbox Code Playgroud)