자체 호스팅 사이트의 /admin/email-logs/rejected를 확인해 보면, 거부된 메일의 본문이 다음과 같은 형태인 것을 확인할 수 있습니다:
올바른 메일 본문은 UTF-8 인코딩으로 谢谢로 시작합니다(전체 본문은 훨씬 깁니다). 손상된 텍스트는 base64로 m6Mtyx7x7j+rjuVupyY=입니다.
데이터베이스에 저장된 메일들은 이미 이 손상된 상태입니다. 해당 메일을 메일 서버의 원본과 비교해 보니 메일이 재작성된 것을 발견했으며, 이메일 클리너 모듈이 메일 내용을 뒤섞었(scrambled)다고 의심하고 있습니다. (하지만 Ruby 지식이 부족하여 해당 모듈의 고유한 문자열 인코딩 기능을 이해하기가 어렵습니다.)
ToddZ
1월 7, 2026, 7:06오후
2
이 메시지들이 Exchange 서버에서 온 것일 수 있을까요..?:
Are these messages sent from Exchange?
I ask because I’m familiar with this problem and 100% of the time I’ve seen it, Exchange was the sender and the culprit.
My guess is that it’s erroneously sending out an opaque reference to an internal data store via SMTP. In the cases where it’s been solved, the sender did something to fix it.
2개의 좋아요
아니요. 그 메일들은 텐센트와 넷이즈에서 온 것입니다. 원본 메일(이 문제를 조사하기 위해 메일 서버에 보관해 두었습니다)은 mutt이든 Ruby의 Mail 라이브러리든 문제가 없습니다.
최근 Exchange 서버에서 거부 이메일을 받았는데, 오히려 그쪽에는 이 문제가 없었습니다.
이해했습니다. Mail의 part에는 올바른 charset 정보가 있지만, 어째서인지 그 body에는 해당 정보가 전달되지 않아 바이트가 ASCII-8BIT로 취급되고 있습니다.
sed -i 's/part.body.decoded/part.body.decoded.force_encoding(part.charset || "utf-8")/' /var/www/discourse/lib/email/cleaner.rb
1개의 좋아요
저는 최근에 이 문제를 다음과 같이 수정했습니다:
main ← Supermathie:fix_email_mangling
merged 06:05PM - 15 Jan 26 UTC
- **FIX: tell Mail to not sort body parts on serialisation**
- **FIX: Email::Cle… aner must clear the encoding of replaced bodies**
이 메일(Discourse에 의해 손상되지 않은 메일이라고 가정할 때)을 저에게 전달해 주실 수 있을까요? 그러면 추가적으로 조사해 보고 테스트 케이스로 활용할 수 있을 것 같습니다.
1개의 좋아요
해당 문제를 재현할 수 있는 메일의 단순화된 버전(개인 정보는 제외하고 irb에서 확인했습니다)을 만들었습니다:
issuemail.txt (857 Bytes)
1개의 좋아요
말씀하신 이메일(그리고 이 예시)은 제가 링크한 변경 사항을 넘어 업데이트한 후에도 여전히 문제가 있나요?