你好。过去几天,我一直在努力搭建 Discourse 论坛,所有的困难都出在邮件配置上。我通过跳过邮件注册成功让论坛上线了,但我仍然需要它具备完整功能,以便用户能够注册。我反复尝试了许多不同的方法,但都没有奏效。每次都会出现以下两种情况之一:
- 测试邮件报错提示“主机名 . . . 与服务器证书不匹配”
- 测试邮件报错提示“502”,同时在 Sidekiq 中显示错误
Jobs::HandledExceptionWrapper: Wrapped Net::ReadTimeout: Net::ReadTimeout with #<TCPSocket:(closed)>
那么,这两种错误分别在什么情况下出现呢?第一种错误在每种场景下都会出现。而第二种错误则是在我使用 465 端口时出现的。此时,“发送测试邮件”需要一段时间,随后就会出现该错误。就在刚才,我禁用了 SSL,因此 587 端口可用,但此时既没有错误一也没有错误二,而是卡在“正在发送测试邮件”的状态。
目前我实在不知道该怎么办了,已经为此挣扎了好几天,仍未找到解决方案。非常感谢您的帮助。感谢您的时间和支持。
更新: 我使用 curl --ssl-reqd 命令测试了 465、587、25 和 2525 端口。结果如下:
25:无法工作(Curl 错误 35,错误的版本号)
465:按预期工作,邮件响应迅速
587:无法工作(Curl 错误 35,错误的版本号)
2525:未报错,但从未发送邮件(时间一直在累积,却始终没有发送邮件)
如果有帮助的话,我当前的配置(出现 502 错误时)如下:
DISCOURSE_SMTP_ADDRESS: CENSORED
DISCOURSE_SMTP_PORT: 465
DISCOURSE_SMTP_USER_NAME: CENSORED
DISCOURSE_SMTP_PASSWORD: CENSORED
# DISCOURSE_SMTP_ENABLE_START_TLS: true # (可选,默认为 true)
模板:
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
## 如果希望添加 Let's Encrypt (https),请取消注释以下两行
- "templates/web.ssl.template.yml"
- "templates/web.letsencrypt.ssl.template.yml"
端口暴露:
expose:
- "80:80" # http
- "443:443" # https
这是一张包含邮件信息的图片:
我不这么认为。邮件服务由 VoltHosting 提供,希望能有所帮助。
此外,Discourse 服务器安装在 var/discourse 下,它确实可以运行(我可以用一个通过跳过邮箱验证创建的管理员账号登录网站并浏览,我也是通过这种方式测试邮件的——即在“邮件 > 设置”和“邮件 > 预览摘要”中尝试发送测试邮件,而错误正是在这些地方出现的。不过还是感谢您的帮助。
Stephen
(Stephen)
4
尝试使用推荐的邮件服务提供商之一,这将帮助您快速判断问题出在 Discourse 安装上,还是您试图连接的邮件服务器上。
之所以列出推荐的提供商,是因为它们已验证可与 Discourse 配合使用。SMTP 配置即使在最理想的情况下也可能令人头疼,通常认为,如果您未采用推荐的配置方案,则需自行承担由此产生的额外技术负担。
1 个赞
感谢您的回复。我认为我无法使用推荐的供应商之一,因为制定该计划的人在该公司还有更多邮箱账户,这将产生除 VPS 本身费用之外的额外费用,而且我认为目前无法这样做。是否有其他方法可以更高效地测试电子邮件服务,而无需每次都重新构建论坛?感谢您的帮助。
Stephen
(Stephen)
6
更改电子邮件设置无需重新构建。您可以执行以下操作:
./launcher destroy app
./launcher start app
编辑电子邮件设置后,新设置将自动生效。所有环境变量均适用此规则。
如果您的服务器证书与主机名不匹配,这可能是 VoltHosting 的问题而非 Discourse 的问题,建议联系 VoltHosting 寻求其电子邮件系统的支持。他们可能提供一个有效的主机名供您使用。
无论如何,建议您使用上方链接页面中提供的免费试用服务,以验证 Discourse 本身是否能正确处理电子邮件。一旦确认 Discourse 运行正常,您可以随时切换回 VoltHosting 的 SMTP。
最后确认一下,您的实例是否按照此指南进行安装?
1 个赞
谢谢。我将来肯定会使用这个方法,但我仍在寻找可能的解决方案。如果有帮助的话,这是一张 Sidekiq 错误的截图:

我当然可以使用免费试用版,但毕竟这只是免费试用,确实存在一些限制。是的,我确实遵循了官方指南来安装 Discourse 论坛。论坛已经正常运行,只是电子邮件功能无法工作。感谢您的帮助。
Stephen
(Stephen)
8
此时,您的选择确实是使用推荐的提供商进行测试,或联系 VoltHosting。错误表明 SMTP 服务器提供的证书对于用于连接的 hostname 无效。
除非您能通过使用推荐的某项服务进行测试来证明并非如此,否则此问题与您的 Discourse 安装极不可能有关。
pfaffman
(Jay Pfaffman)
9
该超时错误表明您无法连接到邮件服务器。可能是 Digital Ocean 阻止了访问,也可能是其他原因。您应该能够执行以下命令:
telnet server.hostname server-port
您可能需要联系设置或管理该邮件服务器的人员寻求帮助。
1 个赞
感谢您的回复。我刚刚运行了该命令,结果如下:
我不确定这是否应该允许我使用
AUTH LOGIN。如果是的话,那么问题应该就在这里,对吗?感谢您的帮助。
pfaffman
(Jay Pfaffman)
11
嗯,看来问题不在服务器层面。我下一个猜测是 Docker 网络问题,但也可能是其他原因。
感谢您的回复。如果方便的话,我该如何进一步调查这个问题?是否有可以运行的 Docker 命令来测试并查看其输出,或者其他方法?是否有任何方式可以在某处进行测试并获得问题的输出?如果没有,我也完全理解。感谢您的帮助。
更新: 我使用 curl --ssl-reqd 命令测试了端口 465、587、25 和 2525。结果如下:
25:未成功(Curl 错误 35,版本号错误)
465:按预期工作,邮件响应迅速
587:未成功(Curl 错误 35,版本号错误)
2525:未报错,但从未发送邮件(时间持续累积,发送过程未停止,且未发出任何邮件)
如果有帮助的话,我当前的配置如下(伴随 502 错误):
DISCOURSE_SMTP_ADDRESS: CENSORED
DISCOURSE_SMTP_PORT: 465
DISCOURSE_SMTP_USER_NAME: CENSORED
DISCOURSE_SMTP_PASSWORD: CENSORED
# DISCOURSE_SMTP_ENABLE_START_TLS: true # (可选,默认为 true)
模板:
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
## 若需添加 Lets Encrypt(https),请取消注释以下两行
- "templates/web.ssl.template.yml"
- "templates/web.letsencrypt.ssl.template.yml"
暴露端口:
expose:
- "80:80" # http
- "443:443" # https
这是一张包含邮件信息的图片:
不确定原因是否是 Discourse 未通过 SSL/TLS 连接,或其他问题。希望这些信息能有所帮助,协助解决问题。
1 个赞
IAmGav
(Gavin Perch)
14
添加此项并查看是否生效:
DISCOURSE_SMTP_ENABLE_START_TLS: False
感谢您的回复。很遗憾,问题仍未解决。我仍然收到相同的 502 错误。
不确定这是否有帮助,但我能够从 VPS 运行 curl --ssl-reqd 命令并成功发送邮件(我在 此 回复中提到了这一点)。不仅如此,我在应用内部(通过 ./launcher enter app 进入)运行了该命令,结果也成功了,得到了与之前测试相同的结果(465 端口正常,25 和 587 端口无法工作,2525 端口出现超时错误),但在论坛本身上运行(使用测试邮件)时仍然收到 502 错误。希望这些额外信息能有所帮助。感谢您的帮助。
1 个赞