Ethsim2
(Ethan )
1
Discourse에서 수신된 이메일이 거부되는 문제를 확인하고 있습니다.
Email can not be processed: Access Denied
수신 이메일 자체는 정상적으로 작동하는 것으로 보입니다. 메시지는 메일 수신기에 도달하며, SPF, DKIM, DMARC 모두 통과합니다. 이후 Discourse가 Jobs::ProcessEmail을 통해 이를 처리합니다.
해당 동작은 MIME/본문 내용에 따라 달라지는 것으로 보입니다:
- 단순/평문 이메일 → 허용
- Outlook 서명, 테이블 및/또는 인라인 이미지를 포함한 이메일 →
Access Denied로 거부
거부된 이메일 로그는 실패가 Email::Processor#process!에서 발생했음을 보여줍니다.
Discourse 애플리케이션 버전:
4143157a17dc3ff63c909c64d0cf578243d38861
이 설치 환경은 최근에 다른 서버로 마이그레이션/복원되었으나, 수신 SMTP 전달 자체는 정상적으로 작동하며, 문제는 보다 풍부한 이메일 본문과 특히 관련이 있는 것으로 보입니다.
필요하다면 정제된(raw) MIME 메시지와 추가적인 IncomingEmail/Email::Receiver 진단 정보를 제공할 수 있습니다.
Ethsim2
(Ethan )
2
업데이트: Access Denied 실패의 원인을 재현했고, PR을 열었습니다:
제 초기 관찰 중 중요한 부분은 다음과 같습니다:
- 단순한 일반 수신 이메일 → 허용됨
- 내장 미디어가 포함된 더 풍부한 이메일 →
Access Denied로 거부됨
거부된 메시지는 외부인(스트레인지어)의 수신 이메일을 허용하는 카테고리에서 스테이징/외부인 사용자로 처리되었습니다.
#42079 이후로, NewPostManager는 이미지 크기 메타데이터가 없을 때 게시물 내용에서 내장 미디어를 직접 감지합니다. 이로 인해 이러한 메시지가 :contains_media 검토 경로로 들어가는 것이 올바르게 처리됩니다.
그러나 게시물을 검토 대기열에 추가하기 전에, NewPostManager.default_handler는 일반적인 카테고리 토픽 생성 가디언(Guardian) 검사를 수행합니다.
스테이징된 수신 이메일 사용자의 경우, Email::Receiver가 이미 해당 카테고리의 외부인 이메일 경로를 허용하고 skip_validations를 전달했음에도 불구하고 이 검사에서 실패할 수 있습니다.
그 결과 제가 목격한 오류가 발생합니다:
Email::Receiver::InvalidPost: Access Denied
외부인으로부터 미디어가 포함된 이메일에 대한 엔드투엔드 수신기 회귀 테스트를 추가했습니다.
현재 main 브랜치에서 수정 전, 테스트는 다음과 같이 재현됩니다:
Email::Receiver::InvalidPost: Access Denied
또한 #42079 바로 이전 시점의 동일한 케이스를 테스트하여 수신 이메일이 허용됨을 확인했으며, 이는 해당 변경 사항으로 인해 도입된 회귀 문제임을 확인했습니다.
해당 PR은 미디어 검열을 우회하는 것이 아니라 의도된 미디어 검열을 유지합니다. 수정 사항에 따라 수신 이메일은 ReviewableQueuedPost로 대기열에 추가되고, 그 검토 이유는 다음과 같습니다:
contains_media
관련 Email::Receiver 및 NewPostManager 스펙이 로컬에서 통과합니다:
261 examples, 0 failures
따라서 이는 제가 위에서 보고한 Access Denied 동작을 설명하는 것으로 보이며, 왜 단순한 이메일은 작동했지만 내장 미디어가 포함된 더 풍부한 메시지는 작동하지 않았는지를 포함합니다.