Discourse/mail-receiver:release 的 Docker 镜像似乎已过时

更新:我测试了当前的 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)

因此,似乎存在两个独立的问题:

  1. 已发布的 discourse/mail-receiver:release 镜像已过时,仍包含旧的快速拒绝实现。
  2. 当前的 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 引用。

2 个赞