你试过这个线程和其他相关线程中的解决步骤吗?
在你的 app.yml 中添加一行:
DISCOURSE_SMTP_DOMAIN: [your server's fqdn]
然后在 /var/discourse 目录下执行 ./launcher rebuild app。
discourse-doctor 可能仍会报告失败,但从管理控制台发送测试邮件应该可以正常工作,正常的邮件流程也应恢复。
如果上述方法没有奏效,请反馈,因为那意味着还有尚未发现的其它问题。
你试过这个线程和其他相关线程中的解决步骤吗?
在你的 app.yml 中添加一行:
DISCOURSE_SMTP_DOMAIN: [your server's fqdn]
然后在 /var/discourse 目录下执行 ./launcher rebuild app。
discourse-doctor 可能仍会报告失败,但从管理控制台发送测试邮件应该可以正常工作,正常的邮件流程也应恢复。
如果上述方法没有奏效,请反馈,因为那意味着还有尚未发现的其它问题。
看起来很明显,localhost 总是错误的,但大多数 SMTP 服务器会忽略该值,因此这一直无关紧要。
在 https://github.com/discourse/discourse 中,smtp_domain 出现的三个地方都已有 2 到 7 年的历史。我在想,是否某个库出于某种原因开始发送 localhost?
尽管 @Falco 有所顾虑,我认为最好的解决方案还是在某处真正修复这个问题。
无论共识是否决定继续发送 localhost(尽管这不符合 RFC 规范),都需要按照上述方式修复 rake 任务。哦,顺便提一下,那段代码是我写的。
但是,等等。我发现 action_mailer.smtp_settings['domain'] 可以为空。所以我想:
Net::SMTP.start(smtp[:address], smtp[:port], 'localhost', smtp[:user_name], smtp[:password], smtp[:authentication])
应该改为:
Net::SMTP.start(smtp[:address], smtp[:port], smtp[:domain] || 'localhost', smtp[:user_name], smtp[:password], smtp[:authentication])
至少暂时这样。我认为如果存在 domain 就应使用它;如果 discourse_smtp_host 未定义,则使用当前的(但可能是错误的)行为,即使用 localhost。
我不太愿意将此添加到 discourse-setup 中,因为目前对几乎所有人来说都能正常工作,而且这会增加一个令人困惑的问题。(我正准备为 notification_email 添加一个问题,如果我们不小心,它可能会开始变得像我记忆中几十年前的 Linux 内核那样复杂。)
也许 localhost 的来源就在这里?
刚被标记到这个问题,可以确认修复有效。我们原本低流量的实例也在 Sidekiq 中出现了激增, apparently 是由于摘要任务多次重试所致。
我原本以为 Google 实施了新的使用限制,因为那里的错误信息正是他们用于拒绝 DoS 攻击时发出的。
感谢您的报告!我很快将在 Discourse 设置中添加对此问题的修复。
现在已:
作为示例环境变量配置添加到所有示例文件中
在 Discourse 新安装设置过程中被询问
在 discourse doctor 和 rake 任务中已修复
感谢大家 ![]()