使用 Devise 发送 PostMark 邮件时出现 SSL 错误

Posted

技术标签:

【中文标题】使用 Devise 发送 PostMark 邮件时出现 SSL 错误【英文标题】:SSL error when sending PostMark mail with Devise 【发布时间】:2015-04-22 00:13:13 【问题描述】:

我有一个运行 Rails 4.2.0、Devise 3.4.1 和 postmark-rails gem 最新版本的应用程序。起初发送重置密码邮件似乎工作正常,但我从未收到邮件。

然后我改了config.action_mailer.raise_delivery_errors = true(原来是假的),发现报错如下:

SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

请注意,这是在我的开发机器上。

我已经按照here 的描述实现了我的邮件程序,但以下是相关位:

IN /app/mailers/user_mailer.rb:

class UserMailer < ActionMailer::Base
 include Devise::Mailers::Helpers

 default from: "xxx@xxx.xxx" # <- From address replaced by x's

 def confirmation_instructions(record)
  devise_mail(record, :confirmation_instructions)
 end

 def reset_password_instructions(record,token,options)
  devise_mail(record, :reset_password_instructions)
 end

 def unlock_instructions(record)
  devise_mail(record, :unlock_instructions)
 end

end

然后在 development.rb 中:

config.action_mailer.raise_delivery_errors = true
config.action_mailer.default_url_options =  :host => 'localhost:3000' 
config.action_mailer.perform_deliveries = true

在/initializers/devise.rb:

config.mailer = 'UserMailer'

application.rb:(我的应用程序可以使用这两个 ENV 变量)

config.action_mailer.delivery_method = :postmark
config.action_mailer.postmark_settings =  :api_key => ENV['POSTMARK_API_KEY'], :api_token => ENV['POSTMARK_API_TOKEN'] 

宝石文件:

gem 'postmark-rails'
gem 'mail'

我找到了很多关于此 SSL 错误的引用,但找不到任何我认为适用于此的内容。

请帮忙?

更新: 从网络上的各种资源中,主要是this 之一,我怀疑我的问题的根源可能是我使用的是与当前版本的 Windows 版 GIT 一起提供的旧版本的 OpenSSL。我的应用在部署到 Heroku 时可以正常工作。

【问题讨论】:

【参考方案1】:

旧版本的 OpenSSL 确实可能会导致您的问题。由于 POODLE 漏洞,Postmark 在其 API 服务器上禁用了 SSLv3。因此,请务必使用包含修复程序的 up-to-date OpenSSL version 和 patched Ruby version。

【讨论】:

以上是关于使用 Devise 发送 PostMark 邮件时出现 SSL 错误的主要内容,如果未能解决你的问题,请参考以下文章

Postmark::InvalidMessageError 尝试发送邮件时

邮件未在 rails 上使用 devise、heroku 和邮戳发送

在 Heroku 上使用 Postmark API 的 Rails 电子邮件——由对等方重置连接

邮戳:发送带有模板的电子邮件

RSpec 和测试 Devise 的邮件

将 Postmark 与 Symfony Mailer 集成的问题