./discourse-setup 不会填充 DISCOURSE_SMTP_DOMAIN

你好,

./discourse-setup bash 脚本没有在 PUPS 配置文件中填充 DISCOURSE_SMTP_DOMAIN

我使用 rake admin:create 在容器内部执行后,发现对 GUI 产生了以下影响;

有一段时间,我确信它被主机名填充了。但在大多数情况下,这并不重要。

我们是否可以使用正则表达式从 DISCOURSE_NOTIFICATION_EMAIL@ 符号后面的内容中提取电子邮件域名?

了解电子邮件域名与网站域名不同的部署情况。

类似如下:

DISCOURSE_SMTP_DOMAIN=$(echo "$DISCOURSE_NOTIFICATION_EMAIL" | sed -E 's/^[^@]+@(.+)$/\\1/')

此变量设置客户端在 SMTP 通信期间使用的 EHLO 主机名。

几乎没有人需要它,而且它设置为何值几乎从不重要。

(我遇到的情况中,没有一种情况需要它起作用)

这是因为 DO 阻止了 587 端口,应该使用 2525——但不确定这如何与 Brevo 一起工作

可以说它应该默认使用 2525 端口,或者建议人们大多数虚拟机都会阻止 SMTP 端口,而大多数 SMTP 服务允许使用 2525 端口(但这说得有点多了)

Digital Ocean 阻止端口 587 的事实是一个糟糕的、不了解情况的决定,没有任何良好实践的依据。

我惊讶他们没有因为同样的原因开始默认阻止 2525 端口。

我并不反对。我敢肯定他们不是唯一这样做的,但我很难找到证据来支持这一点。奇怪的是,他们一直都这样做,但在去年四月(?),他们对所有人强制执行了这一规定。但“所有人”意味着“在下次重启后的所有人”(可能取决于其他需要重启的东西),所以可能要等上几个月你才会重启(或调整你的 Droplet 或其他操作),然后才会开始出现这种情况。

而且他们甚至不提供 SMTP 服务,所以一旦他们阻止了 2525 端口,就无法发送邮件了。我有很多用户在使用 DO,因为 CDCK 从一开始(或者至少从我开始使用时)就推荐他们了。

您是如何发现这一点的?您尝试过 emails:test rake 任务了吗?如果试过,它有用吗?您知道它存在吗?

感谢您,Michael——以下是今天安装时实际发生的情况,以及我是如何发现 587 端口是根本原因的。

当我第一次在 50:30 运行 ./discourse-doctor 时,它清楚地显示出 587 端口的出站 SMTP 失败了。在该过程的任何部分都没有成功的测试邮件。因此,在 51:38,我将 SMTP 端口更改为 2525 并重建了容器。应用程序一恢复,57:46 的第一次邮件测试就立即成功了。

57:58,我注意到我的 Mailgun 账户仍未激活——因此,doctor 报告 SMTP 失败不是由于凭据,而是由于端口被 DigitalOcean 阻止是正确的。

由于 Brevo 启动更快,我更换了提供商:从 58:40 开始设置,在 1:01:12 选择免费套餐,在 1:02:29 更改 DNS 记录,并在 1:04:37 更新 app.yml 中的 SMTP 设置。在 1:06:08,我指出 GUI 显示了 DISCOURSE_SMTP_DOMAIN,即使该变量没有被 ./discourse-setup 填充,这也是为什么空白字段最初让我想当然地认为某些地方配置错误了。

完成 Brevo 配置后,我在 1:42:10 重新运行了 ./discourse-doctor,并在 1:42:25 确认了成功的出站邮件——同样使用的是 2525 端口。

回答您的具体问题:

  • 我是如何发现 DigitalOcean 阻止了 587 端口的?
    ./discourse-doctor 立即报告 587 端口失败,切换到 2525 端口后立即解决了问题。视频清楚地展示了这一顺序。
  • 我使用 rake emails:test 了吗?
    当时没有——我当时依赖于 ./discourse-doctor 和管理界面(admin UI)的测试邮件。直到您提到它,我才知道 emails:test 的存在。我以后绝对会使用它,因为它能提供更清晰的容器内诊断信息。
  • 缺失的 DISCOURSE_SMTP_DOMAIN 有关联吗?
    没有——GUI 中的空白字段是个误导。真正的问题是 DigitalOcean 阻止了 587 端口;一旦我切换到 2525,Mailgun(激活后)和 Brevo 都能正常工作。

再次感谢——您关于 DISCOURSE_SMTP_DOMAIN 实际影响(仅 EHLO)的解释,帮助我弄清楚了为什么缺少该值不重要。