Устранение неполадок с отсутствующим содержимым во входящих письмах

Я изучаю некоторые темы, в которых после импорта писем из рассылки отсутствует часть контента. В некоторых письмах заголовки или разделы обрамлены строками из тильд (“~~~~~~~~~~~~~~~~”), и первая такая строка, идущая отдельной строкой, а также всё, что следует за ней, исключается из поста в Discourse.

При просмотре письма в теме я вижу исходное письмо в кодировке base64. Переключившись на вкладку «Текст», я вижу, что оно было декодировано без каких-либо пропусков.

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

С помощью Rails я вижу, что колонка raw обрывается непосредственно перед первой строкой “~~~~~~~~~~~~~~~~”, а колонка cooked, очевидно, содержит то же самое, что и raw, но в формате HTML. Я пробовал изменять некоторые настройки, связанные с обрезкой писем, но не уверен, как проверить, дают ли они какой-либо эффект.

Как я понимаю, использование функции «Восстановить HTML» для поста или выполнение команды Post.find_by(id: 154678).rebake! в консоли Rails приведёт к тому, что содержимое колонки raw будет использовано для генерации HTML, и значение cooked будет обновлено. Однако я не знаю, будет ли при этом повторно обрабатываться содержимое колонки raw_email. Поэтому я не уверен, как проверить, оказывают ли изменённые настройки какой-либо эффект.

Как мне заставить Discourse повторно обработать raw_email поста, если rebake! этого не делает, чтобы я мог быть уверен в правильности диагностики?

Если у вас есть какие-либо мысли о том, как предотвратить пропуск контента, они, конечно же, тоже будут приветствоваться.

Продолжая поиск связанных тем, я наткнулся на функцию «Расширенное тестирование» в разделе «Электронная почта» в админ-панели. Я подозревал, что именно она отвечает за это, и, используя эту функцию, подтвердил, что проблема вызвана настройкой trim incoming emails (обрезать входящие письма), которая описывается как «Обрезать часть входящих писем, не имеющую отношения к делу».

При отключении этой настройки я получаю правильные результаты для этих писем, но повторная обработка (rebaking) не запускает повторную обработку писем. Таким образом, вопрос остается: как заставить Discourse повторно обработать сообщения на основе их входящих писем?

Перебирая репозиторий в поисках кода, отвечающего за обработку писем, я в итоге нашел задачу Rake posts:refresh_emails, которая принимает необязательный ID темы. Используя следующую команду, как следует из названия, были повторно обработаны письма, а также пересозданы (rebaked) все посты в указанной теме.

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