Хм, в этом примере и в полном исходном коде письма, которое вы мне прислали (спасибо!), атрибут moz-do-not-send не должен влиять на отображение тегов <img> или <a>, в которых он используется. Фильтр mozfilter проверяет только значения атрибута class, и я не вижу других мест, где он мог бы быть отфильтрован.
Поэтому я не могу понять, почему содержимое ссылки с псевдонимом и её атрибут href разделяются, если только импортер Discourse по какой-то причине внезапно не решил использовать часть plain/text из письма в кодировке Mime (где текст и URL действительно разделены). Почему он мог бы так поступить, я не знаю.
В вашей тестовой среде Discourse попробуйте импортировать/отправить письмо из Thunderbird в формате HTML, содержащее как ссылку с псевдонимом, так и, например, встроенное изображение или что-то ещё, что явно укажет на то, что это HTML-часть письма.
Я всё ещё думаю, что здесь используется Discourse с другими MIME-частями (в данном случае часть plain/text, за которой следует часть image/… письма, для создания его версии в Markdown, хотя я не знаю, почему. Возможно, HTML-валидатор отклоняет часть text/html из-за атрибутов, не допускающих строгой валидации, таких как moz-do-not-send!?
Не могли бы вы провести ещё один тест с тем же сообщением (некоторый текст с изображением посередине, но также сделайте часть текста (но не весь) жирным, даже если это всего одно слово. Я думаю, это поможет определить, берётся ли текстовая часть из блока text/plain или text/html.
И извините, что спрашиваю, но просто для уверенности: у вас установлено incoming_email_prefer_html в true (отмечено)?!
Спасибо, @Flominator. Я вижу, что выделенный жирным текст теперь курсивом, значит, HTML напрямую не используется, но какой-то способ выделения всё же применяется. Интересно, не добавляется ли к части email с типом text/plain какая-то разметка или форматирование? Не могли бы вы, как и в прошлый раз, отправить мне исходный код письма в личное сообщение?
Привет, @Flominator, спасибо за исходное письмо. Просмотр альтернативной части text/plain письма действительно показывает, что звездочки окружают текст, который в части text/html выделен жирным. Большинство рендереров Markdown (например, тот, что в Discourse) интерпретируют это как курсив. Вот фрагмент text/plain, скопированный и вставленный отдельно:
Bild in die Mitte dann wieder Text von dem ein Teil sogar fett
geschrieben ist
Gruß
Flo
Это выглядит идентично вашему скриншоту.
Так что, как я полагаю, происходит следующее: фрагмент text/html отклоняется как некорректный HTML (вероятно, из-за нестандартного имени атрибута moz-do-not-send в тегах a). Для этого потребуется патч, изменяющий проверку корректности HTML (возможно, просто удаляющий эти атрибуты), и я менее уверен в стабильности такого решения без внесения изменений в основной код. Я займусь этим, когда у меня появится время.
Это означает, что патч, прикреплённый в одном из предыдущих комментариев, не сработает (вероятно, не «катастрофически», но может потребоваться пересборка для возобновления обновлений), когда вы обновитесь и включите этот новый коммит (скорее всего, при следующем обновлении).
Если у вас он применяется автоматически (например, с помощью команды git apply в app.yml, как описано выше), вы должны удалить её перед следующим обновлением. Фактически, может потребоваться пересборка, так как этот коммит может не примениться, поскольку место в receiver.rb, куда он должен вносить изменения, уже изменено патчем.
Я собираюсь: 1) удалить команду git apply из app.yml, 2) пересобрать приложение, 3) обновить (если это ещё не произошло в процессе пересборки). Сообщу, как всё пойдёт…
[10 минут спустя…]
В итоге я поступил иначе, так как это не требует простоя во время пересборки:
удалить git apply для патча из app.yml (это нужно сделать только перед следующей пересборкой контейнера приложения)
откатить изменённый файл с помощью:
i) launcher enter app
ii) (теперь вы в контейнере приложения) cd /var/www/discourse git checkout ./lib/email/receiver.rb exit