重构邮件:测试 rake 任务输出

我最近检查了 emails:task 和相关代码,目的是测试所有失败的代码路径并润色错误文本。

我还发现,设置 DISCOURSE_SMTP_ENABLE_STARTTLS=false 的效果(大部分)是无效的。设置此项实际上并未禁用 STARTTLS,事实上,它可以在连接时与 TLS 共存(DISCOURSE_SMTP_FORCE_TLS=true)。

因此,我:

但在合并之前,我认为在仪表板中为设置 DISCOURSE_SMTP_ENABLE_STARTTLS=false 的情况添加管理员警告是合适的。我想象至少有一个自托管用户设置了此项,但他们并不需要它,并且实际上依赖于 STARTTLS。

4 个赞

这听起来是项不错的工作!我(认为我)注意到的一点是,rake 任务实际上并没有使用与实际发送(例如从 /admin/email 测试页面)相同的代码。我非常确定我遇到过一种情况,即它在 UX 中有效,但在 rake 任务中无效(或者也许是相反的?)

趁你还记得,如果你能确保它在实际发送时使用的是 Discourse 所使用的相同代码,那就太好了。

2 个赞

我们也在处理这个问题,以及改进队列邮件作业失败时的日志记录:+1:

4 个赞

您在我托管的论坛上需要做什么吗?

4 个赞

不,此警报不应显示在我们的托管环境中。我们会修复它,感谢您一如既往的报告。

5 个赞

@supermathie 这样做是否值得向拥有此变量的每个站点的每位管理员发送私人消息?我们当前的“问题检查”系统会执行此操作,而且我不确定在此处是否需要,因为在大多数情况下,这只会产生“nil”效果。理想情况下,我只想在仪表板中显示此信息,而不通知管理员用户,不确定我们当前的“问题检查”结构是否支持这种情况。

我认为是的——我发现,鉴于许多管理员对电子邮件设置感到困惑,有人设置了这个变量,而他们实际上依赖于 starttls。

可能没有人应该设置它。

我宁愿收到一个错误的警告,也不愿默默地破坏某人的电子邮件设置。

另一种选择是移除检查并禁用该变量,使其完全不起作用。

1 个赞

当外出 SMTP 服务器是 localhost(即与 Discourse 域名匹配)时,不显示警告会更好,因为 Docker 容器和主机之间不需要 TLS,它们是同一台机器。

1 个赞

在这种情况下,您可以从环境中删除该变量。

它仅在提供 STARTTLS 时使用。

1 个赞