0

我用 Rails 3 构建了一个应用程序,并创建了一个简单的联系我们页面,通过我的 SMTP 服务器发送邮件。问题是我的应用程序在我的本地主机(我的电脑)中运行时可以发送邮件,但是当我在托管服务器(hostgator)中运行应用程序时它不起作用。有趣的是,smtp 服务器是一样的!

这是我的本地主机中的配置(它有效!):

配置/环境/developer.rb

# ActionMailer Config
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.default :charset => "utf-8"

配置/初始化程序/setup_mail.rb

ActionMailer::Base.smtp_settings = {  
  :address              => "mail.mydomain.org",  
  :port                 => 26,  
  :domain               => "app.mydomain.org",  
  :user_name            => "register@app.mydomain.org",  
  :password             => "********",  
  :authentication       => "plain",  
  :enable_starttls_auto => false  
} 

我的主机服务器的 url 是 app.mydomain.org,所以在托管应用程序中我只更改了这个:

配置/环境/development.rb

# ActionMailer Config
config.action_mailer.default_url_options = { :host => 'mydomain.org' }
...

在主机服务器中,现在我在开发模式下使用 WEBrick 运行应用程序。我得到一个超时错误:

....
Timeout::Error (execution expired):
  app/controllers/contact_us_controller.rb:13:in `create'
...

我错过了什么吗??

编辑和解决:

Hostgator 支持人员刚刚找出了此问题的原因。在ActionMailer设置中,:address必须是localhost,而不是mail.mydomain.org。所以 ActionMailer 将是:

ActionMailer::Base.smtp_settings = {  
  :address              => "localhost",  
  :port                 => 26,  
  :domain               => "app.mydomain.org",  
  :user_name            => "register@app.mydomain.org",  
  :password             => "********",  
  :authentication       => "plain",  
  :enable_starttls_auto => false  
} 
4

1 回答 1

0

我认为您的意思是 development.rb,而不是 developer.rb。此设置仅在开发中运行,并且假设您已将 RAILS_ENV 设置为服务器上的生产,它将是 production.rb,而不是 development.rb,将被处理。

如果两者的服务器相同,则可以将其移至 application.rb(或 config/initializers 中的脚本)。不过,您可能需要不同的生产设置,以便它指向 localhost。这也可以解决这里的问题,以防某些 DNS 问题或服务器配置阻止传出 SMTP 请求。

于 2012-04-04T22:43:25.433 回答