Anv
(Nikita)
1
你好。我在本地服务器上运行了一个未使用 Docker 的 Discourse,并安装了 iRedMail。起初我尝试使用 mail.ru 的 SMTP 服务器。测试邮件和邀请邮件都能成功发送,但邮件通知没有收到,密码重置邮件也未到达。于是我决定安装本地邮件服务器,以便通过日志排查邮件为何无法发出。我照做了,本地邮箱之间的邮件可以正常收发,这足以用于测试。我以为这对本地 Discourse 和邮件服务已经足够了。我配置了本地 SMTP 服务器,发送了一封测试邮件……它确实收到了!结果并非如此(苦笑)。我查看了邮件服务器的 /var/log/mail.log 日志:
。现在,我尝试向同一邮箱发送邀请邮件……查看邮件服务器日志……却没有任何记录,日志为空。我不知道问题出在哪里。
我只想知道如何让 Discourse 与 Postfix 正常通信。
目前,我通过手动启用方式激活了一个管理员账户,原因不言而喻:我没有收到验证邮件。如有需要,我可以提供配置文件和日志等文件。
neounix
(Dark Matter)
2
亲爱的 @Anv,
欢迎来到 Discourse Meta。
通常遇到此类问题时,我们会运行类似以下命令:
sendmail -vvv A_VALID_EMAIL_ADDRESS < email.txt
这将为您提供与 SMTP 服务器握手过程的详细输出;通常,这些详细的日志记录会为您提供解决问题的线索。
希望这能帮到您。
Anv
(Nikita)
3
你好!我没有太多经验。第一次安装 Discourse 和邮件服务器。能否详细说明一下我具体需要做什么?谢谢。
neounix
(Dark Matter)
4
嗨 @Anv
首先,您需要暂时“忘记”Discourse,专注于配置、测试并确认您的 SMTP 邮件中继能够正常中继邮件。
您是否已经完成了这一步?
neounix
(Dark Matter)
6
嘿 @Anv
这确实是一个高级安装。
你试过在没有 Discourse 的情况下测试并确保它正常工作吗?
比如:
sendmail -vvv A_VALID_EMAIL_ADDRESS < email.txt
?
Anv
(Nikita)
7
我在本地域名 “@ugda.space” 中创建了两个邮箱,结果它们之间的邮件互相发送成功。但发送到 Gmail、Mail.ru 或 Yandex 邮箱时,邮件无法互相送达。我原本没有设置这些外部邮箱,因为我认为仅靠本地内部通信就足以进行测试。
Mevo
8
@Anv 让我直说吧:一个好的不成文规则应该是“如果你不愿意花精力去倾听,就不要要求别人和你交谈”。这里的“倾听”指的是认真考虑对方告诉你的内容。参与论坛讨论,我猜,也算作“要求别人和你交谈”,尤其是当你寻求帮助时。
反复重复同样的话,并迫使对话者也重复自己,这对任何人都没有好处。
那么,你为什么不先运行这个命令行呢?
Anv
(Nikita)
9
对不起。我想我还没有完全理解需要我做什么。我做得对吗?
neounix
(Dark Matter)
10
嘿 @Anv,
我理解你的沮丧;很抱歉我无法每次你回复时都有更多空闲时间来调试你的 SMTP 中继问题。
看起来你的 SMTP 邮件主机正在接收邮件;但这并不一定意味着它能作为 SMTP 中继正常工作。
我记得,凭印象,有一个标志可以使用 sendmail 和其他邮件客户端来检查 SMTP 主机是否作为中继正常工作。你可以研究一下 sendmail -G 选项(或寻找其他测试方法)。基本上,你需要使用新配置的 SMTP 主机作为中继,将邮件发送到一个与你当前主机不同的测试邮箱地址。
一些背景
在过去,大多数 SMTP 主机默认就可以中继邮件;但随后互联网上的所有 SMTP 主机都变成了巨大的垃圾邮件箱,因为垃圾邮件发送者会利用中继功能(主机所有者并不知情)向全世界发送垃圾邮件。
总之,你需要检查你新配置的 SMTP 主机是否能为你中继邮件。
你是否仔细查看过配置教程,看看其中是否提到了将 SMTP 主机设置为中继?
我只是在随口说说,希望这能在某种程度上帮助你推进 SMTP 主机项目的下一步。
Anv
(Nikita)
11
好的,我想我明白你的意思了。我会看看能不能找到这方面的信息。
Mevo
12
您提到您已在不使用 Docker 的情况下安装了 Discourse。您是否可以使用新安装时注册的邮箱,以“经典”方式(即使用 Docker)重新进行一次全新安装?或者您无法在所使用的机器上运行 Docker?
Anv
(Nikita)
13
我尝试过使用 Docker,但完全没有收到邮件。我甚至无法创建管理员账户。由于缺乏经验,我决定卸载 Docker。
neounix
(Dark Matter)
14
嗨 @Mevo 和 @Anv
早上好。
我知道这或许没什么帮助,但作为“又一个数据点”,我在 Docker 生产环境部署或 macOS 桌面“无 Docker”开发环境中配置 Discourse 的 SMTP 邮件时从未遇到过问题;不过我一直使用的是第三方 SMTP 服务。
你们引起了我的注意;因此我现在对这个小谜题非常感兴趣,并打算在未来几周内找个时间,在一台 VPS Ubuntu Linux 实例上搭建 SMTP 中继,看看能否让 Discourse 与“老式”SMTP 中继配合工作,而不是依赖“第三方解决方案”。
如果构建这个配置需要几周时间,我提前致歉。因为我最近沉迷于学习 Discourse 插件开发和 Rails 的各种组件运作,导致在一大堆枯燥的政府文书工作上落后了。
Anv
(Nikita)
15
你好 @neounix。
无论如何,非常感谢你在这方面对我的帮助。
也许我主要的问题是,我想在局域网内运行此服务,而不允许从外部网络访问。
Anv
(Nikita)
17
日志显示有一封带有 ID 的邮件。
尝试查找该 ID 的相关提及。
1 ID - 测试消息。
2 ID - 邀请

经过一些尝试和错误,我已经成功让 Discourse 与 Postfix 协同工作。以下是我所使用的步骤,希望能对您有所帮助:
-
设置一条 A 记录,将其指向您的新服务器,例如 forum.domain.com。
-
安装 Postfix,将 myhostname 设置为 forum.domain.com,并将 172.17.0.0/16 添加到 mynetworks,以便 Discourse 容器无需身份验证即可与 Postfix 通信。172.17.0.0/16 是 Docker 容器默认使用的网络。
-
确保 Postfix 可以发送邮件。我推荐使用 swaks:
swaks -t your_name@gmail.com
您应该会收到一封主题为“这是一封测试邮件”的电子邮件。
-
在 containers/app.yml 中,确保注释掉以下三行:DISCOURSE_SMTP_USER_NAME、DISCOURSE_SMTP_PASSWORD 和 DISCOURSE_SMTP_ENABLE_START_TLS。
并将 DISCOURSE_SMTP_DOMAIN 设置为 forum.domain.com(请在此处替换为您自己的域名)。
-
进行测试时,可以通过 docker exec -it app bash 连接到 Discourse 容器,然后运行:
apt update
apt install -y swaks
swaks -t name@gmail.com --server forum.domain.com
您应该会收到一封主题为“这是一封测试邮件”的电子邮件。
-
使用 ./launcher rebuild app 重启 Discourse。现在您应该能够创建新账户并收到验证邮件。