生产环境下Rails action_mailer配置无法工作

3

我正在尝试使用Rails 4.1.0设置action_mailer发送电子邮件。

在我的config/environments/{env}.rb文件中,我有:

config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  address:              'smtp.mandrillapp.com',
  port:                 587,
  domain:               'domain.com',
  authentication:       'login',
  user_name:            'email@domain.com',
  password:             'pass',
  enable_starttls_auto: true  }

在开发环境中它能够正常工作,但是在生产环境中它试图连接到本地主机。

m = Mail.new
m.delivery_method
=> #<Mail::SMTP:0xbd79fdac @settings={:address=>"localhost", :port=>25, :domain=>"localhost.localdomain", :user_name=>nil, :password=>nil, :authentication=>nil, :enable_starttls_auto=>true, :openssl_verify_mode=>nil, :ssl=>nil, :tls=>nil}>

但是当我执行"puts Rails.application.config.action_mailer"时,我得到了正确的配置。

{:raise_delivery_errors=>false, :default_url_options=>{:host=>"domain.com"}, :delivery_method=>:smtp, :smtp_settings=>{:address=>"smtp.mandrillapp.com", :port=>587, :domain=>"domain.com", :authentication=>"login", :user_name=>"email@domain.com", :password=>"password", :enable_starttls_auto=>true}, :assets_dir=>"xxx", :javascripts_dir=>"xxx", :stylesheets_dir=>"xxx", :asset_host=>nil, :relative_url_root=>nil}

有什么想法吗?


Mail.new.delivery_method 返回非 Rails 邮件传递方式。如果您想要 Action Mailer 的信息,请使用 ActionMailer::Base.smtp_settings - pierallard
感谢您的快速评论。ActionMailer :: Base.smtp_settings 显示了正确的信息,但 mail = mail.new; ...; mail.deliver 仍然尝试连接到本地主机。 - jeremymarc
可能是来自Madrillapp的确认帐户邮件?类似于Sendgrid的情况。 - kurenn
nop,mail 正在尝试连接到本地主机的 25 端口。 - jeremymarc
3个回答

2

我忘记了在我的development.rb文件中有这个配置

Mail.defaults do
  delivery_method Rails.configuration.action_mailer.delivery_method, Rails.configuration.action_mailer.smtp_settings
end

2

默认情况下,Mail gem不会使用您的ActionMailer配置。 ActionMailer使用Mail,但是仅当您通过ActionMailer发送邮件时,这些配置设置才会应用。

如果在开发模式下工作,则肯定已经在development.rb环境文件或特定于环境的初始化程序中单独配置了Mail gem。


0

您需要在production.rb文件中添加default_url_options哈希的host选项,如下所示:

  config.action_mailer.default_url_options = { :host => ENV['HOST_DEFAULT_URL'], 
                                           only_path: false }

那应该就可以了。


这已经设置 config.action_mailer.default_url_options = { :host => 'domain.com' }。 - jeremymarc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接