Разбор и правка разметки

html rewriting engine
То, на чём держится отслеживание

Когда engagement-tracking в блоке <signals> стоит в sparkpost, узел сам вставляет в письма ссылки, из которых рождаются события открытий и переходов. Для этого разметку разбирает встроенная библиотека gumbo-parser — разборщик HTML5 из благодарностей руководства.

Как именно правится разметка, руководство не описывает: только ли ссылки или документ целиком. Поэтому перед включением письмо сравнивают до и после узла.

Что делать с неразобранным письмом, решает html-edit-error-mode: по умолчанию — постоянный отказ, иначе письмо уходит без изменений, то есть без отслеживания. В обоих случаях узел пишет ошибку в журнал.

Главная ловушка — тихий режим ошибки. При deliver-unmodified неразобранное письмо уходит без отслеживания, и заметно это только по доле открытий ниже заслуженной — если никто не читает журнал.
Что делает Хаб. Блока <signals> в шаблонах Хаба нет, и разметку писем узел не трогает. Включать движковое отслеживание стоит только после сравнения писем каждого семейства шаблонов до и после узла и выбора режима ошибки.
Рекомендуемые значения

Режим ошибки разбора:

Значение Что с письмом Цена
perm-fail, по умолчанию постоянный отказ потерянное письмо
deliver-unmodified уходит без изменений заниженная статистика открытий
Библиотека gumbo-parser — из руководства (§ 14); режим sparkpost и режимы ошибки — § 11.1.6.2.3, § 11.1.6.2.10. Разбор последствий — наш.
Пример в конфигурации
<signals>
    api-key 0123456789012345678901234567890123456789
    engagement-tracking sparkpost    html-edit-error-mode deliver-unmodified
</signals>
По примеру руководства: без api-key узел не запустится, а deliver-unmodified отправляет неразобранное письмо без изменений.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Как проверить на узле
Найти ошибки разбора разметки:
grep -i 'html' /var/log/pmta/log | tail -20
Ошибку разбора узел пишет в журнал в обоих режимах — единственный след письма, ушедшего без отслеживания. Путь журнала — из log-file.
В Хабе
Цена ошибки
с перерывом: применение прерывает работу узла
Сценарии
Разобраться с доставляемостью · Подключить платформу отправки · Инфраструктура трекинга