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 服务器握手过程的详细输出;通常,这些详细的日志记录会为您提供解决问题的线索。
希望这能帮到您。
1 个赞
Anv
(Nikita)
3
你好!我没有太多经验。第一次安装 Discourse 和邮件服务器。能否详细说明一下我具体需要做什么?谢谢。
neounix
(Dark Matter)
4
嗨 @Anv
首先,您需要暂时“忘记”Discourse,专注于配置、测试并确认您的 SMTP 邮件中继能够正常中继邮件。
您是否已经完成了这一步?
1 个赞
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
好的,我想我明白你的意思了。我会看看能不能找到这方面的信息。
1 个赞
Mevo
12
您提到您已在不使用 Docker 的情况下安装了 Discourse。您是否可以使用新安装时注册的邮箱,以“经典”方式(即使用 Docker)重新进行一次全新安装?或者您无法在所使用的机器上运行 Docker?
1 个赞
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 的各种组件运作,导致在一大堆枯燥的政府文书工作上落后了。
1 个赞
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。现在您应该能够创建新账户并收到验证邮件。
2 个赞