在Rails中config.action_mailer.smtp_settings和ActionMailer :: Base.smtp_settings有什么区别?

and*_*asf 8 ruby-on-rails actionmailer

我在RoR应用程序中设置了Exchange兼容的邮件服务器.我使用了以下设置development.rb:

config.action_mailer.smtp_settings = {
  :address              => 'mail.server.com',
  :port                 => 5870,
  :user_name            => 'username',
  :password             => 'password',
  :authentication       => :login
}
Run Code Online (Sandbox Code Playgroud)

我得到这个设置不起作用 Net::SMTPAuthenticationError: 504 Unrecognized authentication type.

但是,如果我应用完全相同的配置environment.rb,它可以完美地工作:

ActionMailer::Base.smtp_settings = {
  :address              => 'mail.server.com',
  :port                 => 5870,
  :user_name            => 'username',
  :password             => 'password',
  :authentication       => :login  
}
Run Code Online (Sandbox Code Playgroud)

为什么是这样?不应该config.action_mailer.smtp_settings设置相同的设置?这是一个错误吗?它有原因吗?

我按照这里的说法尝试了它,它有效,所以smtp_settings确实对邮件有影响,但在我看来并非所有的选项都计算/工作.

Sim*_*tti 4

config.action_mailer.smtp_settings将设置转发到ActionMailer::Base.smtp_settings.

然而,主要区别在于前者是特定于环境的设置,而第二个是全局设置。

换句话说,您应该确保config.action_mailer.smtp_settings在正确的环境文件中进行设置以应用设置。例如,如果您想在生产中使用这些设置,请在config/environments/production.rb文件中添加分配。同样,如果您希望将设置应用于整个项目,请将它们设置为config/application.rb.