cazee
(Cazee)
1
大家好,
我在 Ubuntu 18.04 的 VPS 上自托管了一个运行良好的 Discourse 实例,已经大约一年了。随着论坛的发展,我开始准备迁移到性能更强的 VPS。因此,我使用了一个最小化的 Ubuntu 20.04 镜像,应用了一些典型的加固措施,并按照 30 分钟安装指南安装了 Discourse Docker。我使用了与现有运行良好的实例完全相同的配置值。但是:激活邮件无法发送。新 Discourse 安装中的邮件故障排查 指南未能提供帮助——我可以通过 telnet 连接,但在运行 ./discourse-doctor 时收到以下错误:
>==================== 邮件测试 ====================
要进行更全面的测试,请访问 http://www.mail-tester.com/ 获取一个测试地址
或者只需给自己发送一封测试邮件。
用于邮件测试的邮箱地址?(输入 'n' 跳过)[已匿名化]: test-9ymkghbvc@srv1.mail-tester.com
正在向 test-9ymkghbvc@srv1.mail-tester.com 发送邮件...
正在使用 smtp.mailbox.org:587 测试向 test-9ymkghbvc@srv1.mail-tester.com 发送邮件。
==================== 错误 ======================
意外错误
>
>503 5.5.1 错误:未启用身份验证
>
>
>================== 解决方案 =====================
>这不是一个常见错误,目前没有推荐的解决方案!
>
>请将上述确切的错误信息报告至 https://meta.discourse.org/
(如果您找到了解决方案,也请一并告知!)
=================================================
(为了能够在此发布,我不得不删去上述 URL 中的一些部分)
奇怪的是:在我运行良好的 VPS 上运行 ./discourse-doctor 时也会收到相同的错误,因此我不确定该错误是否相关。
如您所见,我使用的是 mailbox.org 作为邮件提供商,它运行非常稳定,在隐私保护和邮件基础设施设置方面都是绝佳选择。我已经检查了主机和端口,并且多年来一直在 Thunderbird 和其他 Discourse 实例中使用这些配置。
有什么建议吗?我看到的两个 VPS 之间唯一的区别是:正常运行的 VPS 使用的是 Ubuntu 18.04,而出现问题的是运行 Ubuntu 20.04 的 VPS。
谢谢,cazee
cazee
(Cazee)
3
感谢您的建议。
端口 587 已开放,我可以按照故障排除指南中的说明,使用 telnet 连接到 SMTP 服务器。
此外,在禁用 ufw 的情况下也进行了测试,结果相同。
YAML 文件中没有拼写错误——我在发帖时故意去掉了这些点(新论坛账户,每篇帖子仅允许包含 2 个 URL)。
我还应该检查或尝试其他什么?
请将代码以正确的代码块形式发布,这就是你遇到那些问题的原因。
cazee
(Cazee)
5
我终于解决了这个问题。
问题出在 Discourse 默认使用的发件人邮箱地址。该地址是根据设置中输入的主机名构建的(在我的例子中类似于 v220200xxxxxxxxxxxx.powersrv.de),从而生成了发件人地址 noreply@v220200xxxxxxxxxxxx.powersrv.de,该地址被 SMTP 服务器拒绝。
那么,我为什么要使用这个不友好的主机名呢?只是因为这台服务器旨在替换现有的服务器,而现有服务器对于我们日益壮大的 Discourse 社区来说已经太小了。我正在准备和测试新服务器,稍后将切换 DNS 设置以指向这台新服务器。我只是想节省时间,避免在这里创建临时的友好 DNS 设置。
如何解决这个问题?
在 app.yml 文件末尾查找以下行:
## 如果您想为首次注册设置“发件人”邮箱地址,请取消注释并修改:
## 在收到第一封注册邮件后,请重新注释该行。它只需要运行一次。
取消注释并修改最后一行,将其更改为您的 SMTP 服务器接受的有效发件人地址,例如:
- exec: rails r "SiteSetting.notification_email='USER@DOMAIN.TLD'"
现在运行 ./launcher rebuild app 使更改生效,好了——现在激活邮件已发送,您可以激活管理员账户并完成设置。
我是如何发现的?
我向网络托管服务提供商申请了一个新的邮件账户,并使用这些 SMTP 凭证重新运行了 Discourse 设置——并如预期收到了激活邮件。因此,我知道问题一定与 SMTP 设置有关(而与 Ubuntu / Docker / Discourse 设置的其他方面无关)。
在使用另一个 SMTP 服务器激活管理员账户后,我进入 设置 > 邮件 > 已跳过,发现了发送激活邮件失败的尝试:553 5.7.1 <noreply@v220200xxxxxxxxxxxx.powersrv.de>:发件人地址被拒绝:不属于用户 USER@DOMAIN.TLD
结论
我想提请 Discourse 开发团队注意以下功能请求:建议 - 允许在设置期间可选地设置系统邮件“发件人”。请考虑测试安装(例如,作为实际升级实例前的副本以运行一些测试)可能没有友好的主机地址的情况。如果不必进入 app.yaml 就能完成这些设置,将会顺畅得多。此外,我认为让管理员有权选择使用不绑定于 Discourse 主机名的邮箱地址是个好主意。
谢谢 
同时也感谢 @codinghorror 指点我如何发布代码块。
pfaffman
(Jay Pfaffman)
6
我正在对 discourse-setup 进行一项更改,该更改将要求您在设置过程中配置 notification_email。这应该能从根本上解决您遇到的类似问题。