./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 主机名。

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

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

2 个赞

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

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

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

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

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

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

2 个赞

您是如何发现这一点的?您尝试过 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)的解释,帮助我弄清楚了为什么缺少该值不重要。