根据我在这里发布的问题:mailer error in production only我决定创建一个小型脚手架应用程序来寻找解决方案。
问题: 我不能在生产中发送带有smtp的电子邮件(新闻通讯),但它在开发中非常有效。
您可以在my github repository中找到该应用。
我刚创建了一个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'
电子邮件会被保存,它们会列在索引中。所以数据库应该可以正常工作。
我正在使用Ubuntu 12.04,Apache,Phusion Passenger,SMTP和Gmail帐户。 这可能是服务器问题,还是我在应用程序中做错了什么?
我正在使用fail2ban和denyhost。这些工具可以阻止smtp吗?
任何帮助将不胜感激,谢谢!
答案 0 :(得分:3)
默认情况下,Rails通过连接到目标SMTP服务器来发送电子邮件。请尝试使用sendmail。在config / initializers / production.rb中添加:
config.action_mailer.delivery_method = :sendmail
答案 1 :(得分: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'
}