我有一个Rails应用程序被配置为通过SMTP使用Amazon SES。不过,当我尝试发送电子邮件时,它似乎在一分钟后超时,我得到了一个EOFError。这闻起来像是配置问题--电子邮件似乎构造得很好,我可以从AWS SES控制台向自己发送测试电子邮件。这是在沙盒模式下,应用程序运行在开发模式下,但是发送和接收的电子邮件都经过SES验证,development.rb是这样设置的:
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp
我试过上百万种配置这开始让我发疯了。2任何帮助或指导都将非常非常感激。3更多细节:
smtp配置,我在一个初始化器:
ActionMailer::Base.smtp_settings = {
:address => "email-smtp.us-east-1.amazonaws.com",
:port => "465",
:authentication => :plain,
:enable_starttls_auto => true,
:user_name => "1234",
:password => "abcde"
}
包含错误的日志,为简洁起见,略做截断:
Sent mail to john@phu.com (59929ms)
Date: Tue, 20 Dec 2011 03:08:37 -0800
From: contact@phu.com
To: john@phu.com
Message-ID: <4ef06cb5ed3c_d73c3fc604c34d4491943@Johns-MacBook-Pro.local.mail>
Subject: Your invitation to Phu
Mime-Version: 1.0
Content-Type: text/html;
charset=UTF-8
Content-Transfer-Encoding: 7bit
<!DOCTYPE html>
....
Completed 500 Internal Server Error in 60564ms
EOFError (end of file reached):
app/controllers/admin_controller.rb:61:in `block in send_invite'
app/controllers/admin_controller.rb:46:in `send_invite'
5条答案
按热度按时间qoefvg9y1#
还有一种解决方案没有Mihir的monkey-patch解决方案(根据AWS SES文档,http://docs.amazonwebservices.com/ses/latest/DeveloperGuide/SMTP.Connecting.html是TLS Package 器解决方案),而是使用端口587和:enable_starttls_auto选项(STARTTLS解决方案)。
xxb16uws2#
如果您想使用SMTP(而不是AWS-SES gem),下面是一个解决方案
http://blog.readypulse.com/2012/01/06/amazon-ses-smtp-emails-using-rails-3-1-in-three-easy-steps/
注意事项
AWS SMTP仅适用于TLS AWS SMTP不支持STARTTLS ActionMailer的配置没有简单的TLS开关。
在你的AWS控制台上启用SMTP支持--请看这里的说明。在你的config/initializers目录下创建一个初始化器。我将它命名为amazon_ses. rb,并将以下代码添加到货币补丁ActionMailer的SMTP设置中。
在您的开发. rb和生产. rb文件中添加以下代码。修改设置以匹配您的环境。
vohkndzv3#
我在使用Rails 2.3和Ruby 1.8.7时遇到了同样的问题,在开发模式下使用沙箱SES帐户,向/从经过验证的发件人发送邮件。
我通过添加unofficial aws-ses gem来解决这个问题。将它粘贴到您的Gemfile中,然后用以下5行替换smtp设置:
发送然后按预期工作...这告诉我电子邮件本身得到了正确的设置。
我在谷歌上搜索了很多,没有看到任何关于SES-SMTP与Rails2.3 + Ruby1.8.7兼容的确认,也没有发现任何明确否认这一点的东西,超出了你和我的经验。
如果您找到解决方案,请告诉我们!
3pmvbmvn4#
SES要求在发送EHLO命令之前进行SSL会话。
我知道System.Net.Mail不能与SES一起工作,因为System.Net.Mail在SMTP会话启动后启动TLS。
mlnl4t2r5#
我在Rails3.2.12中使用了这个方法,将require 'net/smtp'添加到初始化文件中,模块更改如下: