3

根据我在此处发布的问题:仅生产中的邮件程序错误我决定创建一个小型脚手架应用程序来寻找解决方案。

问题:我无法在生产中使用 smtp 发送(通讯)电子邮件,但它在开发中完美运行。

您可以在我的 github 存储库中找到该应用程序。

我刚刚创建了一个contact_messages 脚手架和一个简单的邮件程序。

点击提交按钮接收邮件后的错误日志:

Started POST "/contact_messages" for 194.XXX.XX.XXX at 2013-02-26 19:43:59 +0000
Processing by ContactMessagesController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"xx0nxxJ2xwxxJavvZ278EUy2TABjD9CixxNcxDqwg=",
"contact_message"=>{"name"=>"test", "email"=>"test@testemail.com", "message"=>"test1"}, "commit"=>"Create Contact message"}
Rendered contact_mailer/confirmation.text.erb (0.3ms)

Sent mail to test@testemail.com (38ms)
Completed 500 Internal Server Error in 100ms

Errno::ECONNREFUSED (Connection refused - connect(2)):
  app/controllers/contact_messages_controller.rb:46:in `create'

电子邮件被保存,它们列在索引中。所以数据库应该可以正常工作。

我正在使用带有 Gmail 帐户的 Ubuntu 12.04、Apache、Phusion Passenger、SMTP。这可能是服务器问题,还是我在应用程序中做错了什么?

我正在使用fail2ban 和denyhost。这些工具会阻止 smtp 吗?

任何帮助将不胜感激,谢谢!

4

2 回答 2

3

默认情况下,Rails 通过连接到目标 SMTP 服务器来发送电子邮件。尝试使用 sendmail 代替。在你的 config/initializers/production.rb 中添加这个:

config.action_mailer.delivery_method = :sendmail
于 2013-02-27T11:40:12.327 回答
0

我通过从 mandrill 更改新密码(api-key)解决了我的问题。仍然不知道问题是什么,因为旧的它在开发模式下工作......

工作环境:

YourApp::Application.configure do
  config.action_mailer.smtp_settings = {
    :address   => "smtp.mandrillapp.com",
    :port      => 587,
    :enable_starttls_auto => true,
    :user_name => "MANDRILL_USERNAME",
    :password  => "MANDRILL_PASSWORD", # SMTP password is any valid API key
    :authentication => 'login'
  }
于 2013-02-27T18:13:39.083 回答