AWS SNS 和 Ruby on Rails SMTP

Posted

技术标签:

【中文标题】AWS SNS 和 Ruby on Rails SMTP【英文标题】:AWS SNS and Ruby on Rails SMTP 【发布时间】:2017-07-22 14:00:21 【问题描述】: Rails 4.1.4 64 位 Amazon Linux 2016.09 v2.3.1 运行 Ruby 2.3 (Puma)

我正在尝试将 AWS SES(https://aws.amazon.com/ses/) 与使用弹性 Beanstalk 的 rails 应用程序设置一起使用。我的production.rb中有以下内容@

  ...
  config.action_mailer.smtp_settings = 
    address: 'email-smtp.us-east-1.amazonaws.com',
    port: 587,
    user_name: ENV['SES_SMTP_USERNAME'], # Your SMTP user
    password: ENV['SES_SMTP_PASSWORD'], # Your SMTP password
    authentication: :login,
    enable_starttls_auto: true
  
  ...

但是当我尝试发送电子邮件时,我收到以下错误:

OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv2/v3 read server hello A: unknown protocol
from /opt/rubies/ruby-2.3.1/lib/ruby/2.3.0/net/smtp.rb:587:in `connect'
from /opt/rubies/ruby-2.3.1/lib/ruby/2.3.0/net/smtp.rb:587:in `tlsconnect'
from /opt/rubies/ruby-2.3.1/lib/ruby/2.3.0/net/smtp.rb:555:in `do_start'
from /opt/rubies/ruby-2.3.1/lib/ruby/2.3.0/net/smtp.rb:521:in `start'

追踪还在继续,但我认为这是最重要的一点。

我按照此处列出的说明进行操作:https://www.sitepoint.com/deliver-the-mail-with-amazon-ses-and-rails/

任何建议将不胜感激。

【问题讨论】:

您确定 ENV['SES_SMTP_USERNAME'] 和 ENV['SES_SMTP_PASSWORD'] 可用于您的应用程序吗?您可能想要记录它们的值以进行检查。这些说明将其放在 development.rb 中,这不适用于生产应用程序。出于安全原因,您可能不想将其放在 production.rb 中,但将其放在哪里取决于您的服务器堆栈(apache、nginx、unicorn、passenger、puma 等)以及您使用的 Rails 版本。跨度> 谢谢,我很肯定 ENV 变量可用于配置文件。我认为问题可能是端口。由于某些原因port: 465 似乎解决了这个问题。仍在调查中。 【参考方案1】:

似乎将端口设置为 465 解决了这个问题。

config.action_mailer.smtp_settings = 
  address: 'email-smtp.us-east-1.amazonaws.com',
  port: 465,
  user_name: ENV['SES_SMTP_USERNAME'], # Your SMTP user
  password: ENV['SES_SMTP_PASSWORD'], # Your SMTP password
  authentication: :login,
  enable_starttls_auto: true

【讨论】:

以上是关于AWS SNS 和 Ruby on Rails SMTP的主要内容,如果未能解决你的问题,请参考以下文章

使用适用于 Ruby 的 AWS 开发工具包发布到 SNS 主题时指定区域

使用适用于Ruby on Rails的AWS CI / CI流程进行部署

启动 Ruby on Rails 应用程序时无法通过 AWS Elastic Beanstalk“恭喜”屏幕

将Ruby on Rails项目从github上传到AWS EC2实例错误

如何在 ruby​​ on rails 的亚马逊 aws 服务器中使用 gem 执行 rake 任务?

AWS Elastic Beanstalk Ruby on Rails 6 应用程序部署错误与 nginx