首页 > 解决方案 > Heroku 在尝试发送电子邮件时产生 500 错误

问题描述

我相信 Heroku 上的 Rails 应用程序在尝试发送电子邮件时开始产生 500 个错误 - 我们使用 SendGrid 插件。

我看到的错误是这样的:

OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=error: certificate verify failed (certificate has expired)

我们的证书由 Heroku 管理,因此我无法在 Heroku 控制面板中看到有关它们的信息,但是当我在 Chrome 中查看证书时,它们似乎在 7 月底之前都有效。

我已向 Heroku 支持提出问题,正在等待回复。

更新:Heroku 说这是因为他们的堆栈版本 16 是一个问题,我应该升级到 18。我这样做了,但没有帮助。

我发现出于某种原因,我显然只是在使用 Devise 邮件程序时遇到了这个问题。

我测试了设置 OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE ,这解决了问题......

所以现在我不确定 Devise 是否在做与其他邮件不同的事情,如果是,为什么......

标签: ruby-on-railssslherokusendgrid

解决方案


Heroku 认为这可能是与 Heroku-16 堆栈有关的问题。他们建议升级到版本 18 堆栈。

我尝试更新到 v18 堆栈,但它没有解决我们的问题。

后来我添加了一个日志条目来检查完整的堆栈跟踪,它开始看起来像是涉及到 premailer gem。

我注意到我们在模板中包含了来自 CDN 的 Bootstap,并且该预邮件程序可能无法尝试获取该 CSS。

我最终摆脱了 premailer 和 Bootstrap CSS(不管怎样,这对我们确实有很大帮助)。

这解决了这个问题,但我从来没有真正理解过真正的原因,这可能是由于 Heroku 建议和 mhale 在回答这个问题时提到的 Sectigo 证书于 2020 年 5 月 30 日到期的结果。


推荐阅读