ActionMailer: Default From: address?

前端 未结 6 1336
-上瘾入骨i
-上瘾入骨i 2020-12-15 07:40

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

相关标签:
6条回答
  • 2020-12-15 07:45

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

    config.action_mailer.default_options = {
      :from => "foo@bar.com"
    }
    
    0 讨论(0)
  • 2020-12-15 08:00

    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
    
    0 讨论(0)
  • 2020-12-15 08:03

    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'
    
    0 讨论(0)
  • 2020-12-15 08:06

    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
    
    0 讨论(0)
  • 2020-12-15 08:07

    .. are there changes to rails-6?

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

    is not working in production.rb

    0 讨论(0)
  • 2020-12-15 08:07

    Ruby 5 & 6

    config/environments/$RAILS_ENV.rb
    config.action_mailer.default_options = {from: 'no-reply@example.com'}

    0 讨论(0)
提交回复
热议问题