我用 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
}