【问题标题】:ActionMailer: Default From: address?ActionMailer:默认发件人:地址?
【发布时间】:2011-01-27 13:20:18
【问题描述】:

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

所以,与其调用

from "my@email.com"

每个方法都可以自动调用。

【问题讨论】:

    标签: ruby-on-rails actionmailer


    【解决方案1】:

    导轨 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'
    

    您也可以为每个邮件设置此设置:

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

    导轨 2

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

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

    参考:

    1) Article 讨论插件。

    您可以猴子修补ActionMailer::Basefrom 方法。

    将以下代码添加到您的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
    

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

    config/environments/development.rb:

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

    config/environments/production.rb:

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

    您也可以为每个邮件设置此设置:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 看来,default_options= 已作为 ActionMailer::Base.default 的别名添加到 Rails 4 中。但在 Rails 3.2.12 中它不可用。
      • 我已更新此答案以仅引用 Rails 4,因为提供的代码示例仅适用于 Rails >= 4。
      【解决方案3】:

      在 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】:

        我采用了 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
        

        【讨论】:

          【解决方案5】:

          红宝石 5 和 6

          配置/环境/$RAILS_ENV.rb
          config.action_mailer.default_options = {来自:'no-reply@example.com'}

          【讨论】:

            【解决方案6】:

            .. rails-6 有变化吗?

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

            在生产中不工作.rb

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2015-02-16
              • 1970-01-01
              • 1970-01-01
              • 2010-10-31
              • 1970-01-01
              • 2018-03-10
              • 1970-01-01
              • 2013-12-26
              相关资源
              最近更新 更多