수신된 이메일에서 누락된 콘텐츠 문제 해결

메일링 리스트에서 이메일을 가져온 후 일부 게시글에서 내용이 누락되는 문제를 조사하고 있습니다. 일부 이메일은 제목/섹션을 “~~~~~~~~~~~~~~~~” 줄로 감싸는데, 이 줄이 단독으로 한 줄에 처음 나타나는 위치부터 그 아래에 있는 모든 내용이 Discourse 게시글에서 누락됩니다.

게시글에서 이메일을 검사해 보면 원래 base64로 인코딩된 이메일을 볼 수 있고, Text 탭으로 전환하면 아무것도 누락되지 않고 디코딩된 내용을 확인할 수 있습니다.

./launcher enter app
rails c
Post.find_by(id: 154678)
=> #<Post:0x000055b8da925e08
...

rails를 사용하면 raw 컬럼이 첫 번째 “~~~~~~~~~~~~~~~~” 바로 앞에서 중단되는 것을 볼 수 있으며, cooked 컬럼은 당연히 raw와 동일한 내용을 HTML에 맞게 변환하여 포함하고 있습니다. 이메일 잘림(trimming)과 관련된 몇 가지 설정을 변경해 보았지만, 이러한 설정이 차이를 만드는지 테스트하는 방법을 확신하지 못합니다.

제 이해에 따르면, 게시글에서 Rebuild HTML을 사용하거나 rails에서 Post.find_by(id: 154678).rebake!을 실행하면 raw의 내용을 가져와 HTML을 빌드하여 cooked를 설정합니다. 하지만 raw_email의 내용을 가져와서 다시 처리하는지는 모르겠으므로, 변경된 설정이 효과를 발휘하는지 테스트하는 방법을 확신하지 못합니다.

rebake!이 그렇게 하지 않는다면, 게시글의 raw_email을 다시 처리하도록 Discourse에 지시하는 방법은 무엇이며, 이를 통해 올바르게 문제 해결하고 있는지 확인할 수 있을까요?

내용이 누락되는 것을 방지하는 방법에 대해 의견이 있으시다면, 그것도 물론 환영합니다.

관련 주제를 계속 검색하던 중, 관리자(Admin)의 이메일(Emails) 섹션 아래에 있는 고급 테스트(Advanced Test) 기능을 발견했습니다. 이 기능이 원인이 아닐까 의심했지만, 해당 기능을 사용해 보니 실제로 trim incoming emails 설정이 문제의 원인임을 확인했습니다. 이 설정은 수신된 이메일 중 관련 없는 부분을 잘라냅니다.라고 설명되어 있습니다.

해당 설정을 끄면 해당 이메일들에 대해 올바른 결과를 얻을 수 있지만, rebaking은 이메일을 다시 처리하지 않는 것 같아 질문이 남습니다: Discourse에 수신된 이메일로부터 게시물을 다시 처리하도록 어떻게 지시할 수 있을까요?

리포지토리를 뒤져 이메일 처리 관련 코드를 찾던 중, 선택적으로 주제 ID를 받는 rake 태스크인 posts:refresh_emails를 마침내 발견했습니다. 다음 명령을 사용하면 이름에서 알 수 있듯이 이메일을 다시 처리하고 지정된 주제의 모든 게시물을 다시 생성합니다.

cd /var/discourse
./launcher enter app
rake posts:refresh_emails['24961']

trim incoming emails가 비활성화된 상태에서 해당 주제의 게시물이 예상대로 잘리지 않은 형태로 제공되었습니다. 이로 인해 진행을 위해 먼저 해결해야 하는 또 다른 문제가 드러났지만, 이는 이 주제와는 무관합니다. 모든 주제의 이메일을 새로고침하려면 다음과 같이 rake 태스크를 사용할 수 있습니다.

cd /var/discourse
./launcher enter app
rake posts:refresh_emails