Отклоненные письма не читаются

Когда я проверяю /admin/email-logs/rejected на своём самостоятельно размещённом сайте, то вижу, что у отклонённых писем тело выглядит так:

Правильное тело письма начинается с 谢谢 в кодировке UTF-8 (полное тело значительно длиннее), а повреждённый текст — m6Mtyx7x7j+rjuVupyY= в base64.

Письма в базе данных уже находятся в таком повреждённом состоянии. Сравнив одно из них с копией с почтового сервера, я обнаружил, что письмо было изменено, и подозреваю, что модуль очистки почты исказил его. (Но у меня недостаточно знаний Ruby, чтобы понять его уникальную функцию кодирования строк.)

Есть ли вероятность, что эти сообщения поступают с сервера Exchange..?:

2 лайка

Нет. Они приходят от Tencent и Netease. Оригинальное письмо (я сохранил его на почтовом сервере для расследования этой проблемы) не вызывает проблем ни в mutt, ни в библиотеке Ruby’s Mail.

Недавно я получил письмо с отказом от сервера Exchange, и, наоборот, у него не было этой проблемы.

Понял. У part объекта Mail есть корректная информация о 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 байт)

1 лайк

Сохраняются ли проблемы с указанным вами письмом (и этим примером) после обновления, вышедшего за рамки изменения, на которое я ссылался?

Нет, это уже исправлено. Спасибо.

2 лайка