ActionMailer:默认来自:地址?
用谷歌搜索无济于事。 在API中也找不到任何东西。 我期待某种类方法或配置选项来设置它…
所以,而不是打电话
from "my@email.com"
对于每种方法,都可以自动调用。
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
默认情况下不支持此function。 但是您可以使用action_mailer_callbacks插件来实现此function。 本质上,此插件允许您为deliver
方法添加before
filter。
class FooMailer < ActionMailer::Base before_deliver do |mail| mail.from = "abc@xyz.com" end end
参考:
1)讨论插件的文章。
要么
你可以修补ActionMailer::Base
的from
方法。
将以下代码添加到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
现在,您可以按如下方式配置默认值:
配置/环境/ development.rb:
ActionMailer::Base.default = {:from => 'default@development-server.com'}
配置/环境/ production.rb:
ActionMailer::Base.default = {:from => 'default@production-server.com'}
您还可以为每个邮件设置:
class MyMailer < ActionMailer::Base self.default = {:from => 'default@myapp.com'} end
在Rails 4中,您可以在您的环境中进行设置:
config.action_mailer.default_options = { :from => "foo@bar.com" }
在Rails 3中:
配置/环境/ development.rb:
ActionMailer::Base.default :from => 'default@development-server.com'
配置/环境/ production.rb:
ActionMailer::Base.default :from => 'default@production-server.com'
我选择了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