거부된 메일을 열람할 수 없습니다

자체 호스팅 사이트의 /admin/email-logs/rejected를 확인해 보면, 거부된 메일의 본문이 다음과 같은 형태인 것을 확인할 수 있습니다:

올바른 메일 본문은 UTF-8 인코딩으로 谢谢로 시작합니다(전체 본문은 훨씬 깁니다). 손상된 텍스트는 base64로 m6Mtyx7x7j+rjuVupyY=입니다.

데이터베이스에 저장된 메일들은 이미 이 손상된 상태입니다. 해당 메일을 메일 서버의 원본과 비교해 보니 메일이 재작성된 것을 발견했으며, 이메일 클리너 모듈이 메일 내용을 뒤섞었(scrambled)다고 의심하고 있습니다. (하지만 Ruby 지식이 부족하여 해당 모듈의 고유한 문자열 인코딩 기능을 이해하기가 어렵습니다.)

이 메시지들이 Exchange 서버에서 온 것일 수 있을까요..?:

2개의 좋아요

아니요. 그 메일들은 텐센트와 넷이즈에서 온 것입니다. 원본 메일(이 문제를 조사하기 위해 메일 서버에 보관해 두었습니다)은 mutt이든 Ruby의 Mail 라이브러리든 문제가 없습니다.

최근 Exchange 서버에서 거부 이메일을 받았는데, 오히려 그쪽에는 이 문제가 없었습니다.

이해했습니다. Mailpart에는 올바른 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개의 좋아요

저는 최근에 이 문제를 다음과 같이 수정했습니다:

이 메일(Discourse에 의해 손상되지 않은 메일이라고 가정할 때)을 저에게 전달해 주실 수 있을까요? 그러면 추가적으로 조사해 보고 테스트 케이스로 활용할 수 있을 것 같습니다.

1개의 좋아요

해당 문제를 재현할 수 있는 메일의 단순화된 버전(개인 정보는 제외하고 irb에서 확인했습니다)을 만들었습니다:

issuemail.txt (857 Bytes)

1개의 좋아요

말씀하신 이메일(그리고 이 예시)은 제가 링크한 변경 사항을 넘어 업데이트한 후에도 여전히 문제가 있나요?

아니요, 수정되었습니다. 감사합니다.

2개의 좋아요