无法使用本地 SMTP 服务器发送电子邮件

我已使用 Telnet 测试了 SMTP 服务器:
Telnet 成功连接到 SMTP 服务器。
Telnet 允许我通过 SMTP 服务器进行身份验证。
Telnet 允许我使用 SMTP 服务器成功发送邮件,我在 Telnet 中使用的值与 /var/discourse/containers/app.yaml 文件中的完全一致。

Discourse doctor 指出 Discourse 已成功连接到 SMTP 服务器。
但 Discourse doctor 也指出 Discourse 未能发送测试邮件。

因此,Discourse 存在阻止其发送邮件的缺陷。

我建议问题可能出在你的设置上,而不是 Discourse 本身的 bug。:wink:

2 个赞

你碰巧在使用 smtp-relay.gmail.com 吗?也许是从 DigitalOcean 发出的?这个问题最近似乎出现了,但具体原因目前还不太清楚。

不。因为 SMTP 服务器如前所述运行正常,且 Discourse 已正确安装,并能正确显示要求管理员注册邮件的界面。然而,该邮件并未发送。

我正在使用与 Discourse Docker 容器位于同一台机器上的本地 SMTP 服务器。

我在 /var/discourse/shared/standalone/log/rails/production.log 中发现了一个错误:

渲染 layouts/email_template.html.erb
  已渲染 layouts/email_template.html.erb(耗时:0.1 毫秒 | 分配:32)
已发送邮件 f915c15e-9c4d-4d4e-9527-81bc4984540c@forum.domain.com(63.7 毫秒)
作业异常:主机名 "mail.forum.domain.com" 与服务器证书不匹配

这个错误是什么意思?

3 个赞

上述错误消息似乎是在谈论服务器的 SSL 证书。

服务器上的 SSL 证书是正确的,并且具有正确的主机名。

这看起来是 Discourse 中的一个错误,导致 Discourse 无法正确检测服务器的 SSL 证书。

这听起来不像是 Discourse 本身的缺陷,更像是主机 DNS 解析器配置或 SSL 证书的问题。

由于 telnet 不使用 SSL,我想这就是为什么您发现它能正常工作。在 Linux 系统上,您可以尝试使用 OpenSSL 来测试连接并检查证书,这样或许能进一步排查问题。

以下信息或许会有所帮助:https://docs.pingidentity.com/bundle/solution-guides/page/iqs1569423823079.html

该网站的 HTTPS 功能正常,因为地址栏中显示了绿色挂锁。该网站的 SSL 证书没有任何问题。问题出在 Discourse 检测 SSL 证书的方式上。

该错误并非关于网站证书,而是关于您的 SMTP 服务证书。

2 个赞

SMTP 服务证书仅是服务器的 SSL 证书,而非网站的 SSL 证书。服务器的 SSL 证书正确且运行正常。

在 Discourse 容器所在的同一台机器上配置本地 SMTP 服务器时,Discourse 并未明确指定 app.yml 中 SMTP 设置的确切正确值。这导致了大量的困惑和错误。

在 app.yml 设置中,Discourse 并未清晰说明 DISCOURSE_SMTP_ADDRESS 应为何值。

实际上,它应为 subdomain.domain.com,而非 mail.subdomain.domain.com

正确值:
DISCOURSE_SMTP_ADDRESS: forum.domain.com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: postmaster@forum.domain.com
DISCOURSE_SMTP_PASSWORD: "password"
DISCOURSE_SMTP_ENABLE_START_TLS: true           # (可选,默认为 true)

在发送初始注册邮件失败后出现的错误信息中,Discourse 也未明确说明“服务器证书”具体指代什么。该错误信息位于:
/discourse/shared/standalone/log/rails/production.log
“Job exception: hostname “mail.forum.domain.com” does not match the server certificate"。

然而,实际上,“服务器证书”仅仅是服务器的 SSL 证书。
此外,在错误信息中,Discourse 错误地提到了“主机名”,而实际上所指代的正是 DISCOURSE_SMTP_ADDRESS。

由于 Discourse 的表述模糊,我们经历了一番挣扎。

解决方案很简单:将服务器的 SSL 证书设置为正确的 SSL 证书。

当该问题被发布到 Discourse 论坛时,出现了许多误导性且含糊不清的回答。

Discourse 应当修复这些问题。

2 个赞

现在 Discourse 诊断工具显示邮件已发送:

正在向 admin@email.com 发送邮件...
正在使用 forum.domain.com:587 测试向 admin@email.com 发送邮件。
SMTP 服务器连接成功。
正在向 admin@email.com 发送邮件...
邮件已被 SMTP 服务器接受。

然而,收件箱或垃圾邮件箱中均未收到该邮件。

如何解决此问题?

查看您本地 SMTP 服务器的日志。如果 Discourse 已成功将其交付给 SMTP 服务器,那么后续操作便不再受 Discourse 控制。

Exim4 日志中出现了一条错误消息,它是什么意思?

2021-01-21 00:39:39 H=(localhost.localdomain) [172.17.0.2] X=TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256 CV=no F=<noreply@forum.domain.com> A=dovecot_plain:postmaster@forum.domain.com rejected RCPT <admin@email.com>: 发件人验证失败