更新:我测试了当前的 main 分支
我在本地构建了当前的 main 分支,并发现了另一个问题。
旧的 Docker Hub release 镜像仍然运行着旧的快速拒绝(fast-rejection)代码,并在 RCPT 阶段失败,报错如下:
450 4.7.1 Recipient address rejected: Internal error, API request failed
然而,当前的 main 分支已经移除了 smtp_should_reject / 快速拒绝的实现。构建 main 后,Postfix 改为报以下错误:
warning: connect to private/policy: No such file or directory
451 4.3.5 Recipient address rejected: Server configuration problem
我追踪发现,这是由于 Dockerfile 中仍有两处残留引用:
check_policy_service unix:private/policy
策略服务(policy service)本身已被移除,但 smtpd_recipient_restrictions 仍然引用了它的 socket。
我从 smtpd_recipient_restrictions 中移除了 unix:private/policy,重新构建了镜像,随后入站 SMTP 邮件便成功被接收。
在切换到全局 API 密钥(Global API Key)后,投递到 Discourse 也成功了:
dsn=2.0.0, status=sent (delivered via discourse service)
因此,似乎存在两个独立的问题:
- 已发布的
discourse/mail-receiver:release镜像已过时,仍包含旧的快速拒绝实现。 - 当前的
main分支虽然移除了该实现,但Dockerfile仍然配置 Postfix 使用unix:private/policy。
此外,细粒度 API 密钥(granular API keys)可能还存在另一个问题:一个仅限定于 receive emails 权限的密钥从 /admin/email/handle_mail 返回了 HTTP 404,而全局 API 密钥则返回了 HTTP 200。
如果有帮助的话,我可以提交一个 PR,修复 Dockerfile 中这两处过时的 private/policy 引用。