scavin
(scavin)
9월 6, 2026, 4:30오전
1
안녕하세요,
공식 discourse/mail-receiver:release Docker 이미지가 무시되어 꽤 오랜 시간 동안 재빌드되지 않은 것 같습니다.
GitHub 저장소는 여전히 적극적으로 유지 관리되고 있습니다:
通过在 GitHub 上创建帐户来为 discourse/mail-receiver 开发做出贡献。
그러나 공식 Docker 이미지는:
discourse/mail-receiver:release
거의 2년 전 에 빌드된 것으로 보입니다.
이것이 현재 버전의 Discourse와 호환성 문제를 일으키는 것 같습니다.
제 경우, 수신 이메일은 메일 리시버에 성공적으로 도달하지만, RCPT TO 단계에서 다음과 같이 거부됩니다:
450 4.7.1 Recipient address rejected: Internal error, API request failed
오래된 Docker 이미지는 여전히 smtp_should_reject / 빠른 거부(fast-rejection) 메커니즘을 사용하고 있는 것으로 보입니다.
그러나 현재 Discourse 소스에는 다음과 같은 주석이 포함되어 있습니다:
# this endpoint has been broken for years
# and was used only in the public mail-receiver's fast rejection code,
# which is removed in https://github.com/discourse/mail-receiver/pull/33
PR #33은 이미 mail-receiver에서 해당 빠른 거부 코드를 제거했지만, 이러한 변경 사항은 현재 공개된 discourse/mail-receiver:release 이미지에 포함되지 않은 것으로 보입니다.
공식 메일 리시버 문서/README는 여전히 사용자에게 다음을 사용하도록 안내하고 있습니다:
discourse/mail-receiver:release
따라서 최근 변경 사항 이후 Docker 이미지 게시 과정이 단순히 누락되었는지 궁금합니다.
새로운 discourse/mail-receiver:release 이미지가 빌드되고 게시되어야 하는지 확인해 주시겠습니까?
감사합니다!
scavin
(scavin)
9월 6, 2026, 5:04오전
2
업데이트: 현재 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
정책 서비스 자체는 제거되었지만, smtpd_recipient_restrictions에는 여전히 해당 소켓이 참조되고 있습니다.
smtpd_recipient_restrictions에서 unix:private/policy를 제거하고 이미지를 다시 빌드한 후, 수신 SMTP 메일이 성공적으로 수락되었습니다.
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 키와 관련된 별도의 문제도 있을 수 있습니다: receive emails 범위로만 설정된 키는 /admin/email/handle_mail에서 HTTP 404를 반환한 반면, Global API Key는 HTTP 200을 반환했습니다.
도움이 된다면 Dockerfile의 두 가지 오래된 private/policy 참조에 대한 PR을 제출할 수 있습니다.
2개의 좋아요
Ethsim2
(Ethan )
9월 6, 2026, 7:01오전
3
#mail-receiver의 다른 변경 사항에서 오래된 릴리스 이미지를 확인할 수 있습니다.
8월 11일에 병합된 이 PR을 열었습니다:
main ← Ethsim12:fix-email-encoded
merged 01:09PM - 11 Aug 26 UTC
## What does this change?
Updates mail-receiver to send incoming MIME messages … using the
`email_encoded` parameter expected by Discourse's `/admin/email/handle_mail`
endpoint.
The message is encoded with `Base64.strict_encode64` before being added to
the form data.
This removes use of the deprecated raw `email` parameter.
## Why?
Discourse currently logs a deprecation notice for every incoming email sent
by mail-receiver:
> the email parameter is deprecated. all POST requests to this route should
> be sent with a base64 strict encoded email_encoded parameter instead
A freshly rebuilt `discourse/mail-receiver:release` still reproduces the
warning because the current mail-receiver code continues to send `email`.
## Tests
Adds regression coverage which verifies that:
- the deprecated `email` parameter is not sent
- `email_encoded` is sent
- the encoded value represents the original MIME message
Tested locally with Ruby 3.2.11:
- `bundle exec rake test` — 16 examples, 0 failures
- `bundle exec rubocop` — no offenses
- `bundle exec stree check ...` — all files matched expected format
This is related to #13, which proposed the same API migration in 2023.
This PR refreshes that change against current `main` and adds regression
coverage.
이 PR은 메일 리시버를 다음과 같이 변경합니다:
post.set_form_data(email: @mail)
Discourse에서 기대하는 새로운 email_encoded 매개변수로 변경됩니다.
PR이 병합된 후 8월 17일에 mail-receiver를 다시 빌드했지만, 새로 빌드된 컨테이너에는 여전히 다음 코드가 포함되어 있었습니다:
post.set_form_data(email: @mail)
병합된 PR에 세부 정보를 여기에 추가했습니다:
main ← Ethsim12:fix-email-encoded
Thanks again for merging this.
I rebuilt `mail-receiver` again today (17 August… ), but the published
`discourse/mail-receiver:release` image still appears to contain the old
implementation.
The rebuild reports the `release` image as up to date, and checking the
freshly rebuilt running container gives:
```text
# docker exec mail-receiver \
grep -n -E 'base64|set_form_data' \
/usr/local/lib/site_ruby/mail_receiver/discourse_mail_receiver.rb
40: post.set_form_data(email: @mail)
```
A newly received email therefore still produces the `email parameter is
deprecated` warning in Discourse.
Since #37 is merged into `main`, does the
`discourse/mail-receiver:release` Docker image need to be rebuilt/published
separately for this change to reach normal self-hosted installations?
8월 22일에 다시 빌드했으며 ./launcher rebuild mail-receiver 명령은 게시된 릴리스 이미지가 최신 상태라고 보고했고, 다이제스트는 다음과 같았습니다:
sha256:2a0d45bb92a783c846a821e635413764eeadb3441ef6190085545a4bf054cb1e
제 설치 환경에서는 수신 메일이 여전히 정상 작동하지만, 수신된 각 메일은 게시된 이미지에 병합된 #37 변경 사항이 포함되어 있지 않기 때문에 Discourse의 다음 경고를 계속 트리거합니다:
the email parameter is deprecated
따라서 이는 여러분이 발견한 첫 번째 문제를 독립적으로 확인하는 것으로 보입니다: mail-receiver 저장소에 병합된 변경 사항이 게시된 discourse/mail-receiver:release 이미지에 반영되지 않고 있습니다.
1개의 좋아요