custom-message-id-header

<signals>

Заголовок, по которому служба связывает события письма
в конфигурации это строкаcustom-message-id-header noneвнутри блока <signals>
Свой идентификатор письма во внешней аналитике

Служба получает от узла события доставки, а открытия и переходы — откуда-то ещё. Чтобы связать их в одно письмо, нужен общий идентификатор, и эта строка называет заголовок, из которого его брать. Умолчания нет.

🔴 Работает только при engagement-tracking со значением external. Руководство говорит это прямо: связывание требуется именно там, где события открытий шлёте вы сами.

Длина — до 512 знаков латиницы. У почтовой подстановки свой путь: там вместо заголовка пользуются переменной *custommessageid.

Зачем это на самом деле. Без связывания служба видит два несвязанных потока: «письмо доставлено» и «кто-то что-то открыл». Половина её выводов строится на соединении этих двух, и вендор называет связывание условием полной пользы от аналитики.

Главная ловушка — задать заголовок при отслеживании силами MTA. При значении sparkpost MTA связывает события сам, и строка ничего не добавит. Она нужна ровно в обратном случае.
Что делает Хаб. Не пишет: выгрузкой во внешнюю аналитику мы не пользуемся.

🔎 Приём при этом общий и знакомый: свой идентификатор письма, проставленный заголовком, — то же, что мы делаем полем учёта header_ИМЯ, только для чужой стороны.

Рекомендуемые значения

Строка нужна ровно в одном сочетании:

Отслеживание Строка
external нужна: иначе события не свяжутся
sparkpost не нужна: MTA связывает сам
no не нужна
Требование значения external, предел в 512 знаков и оговорка про переменную почтовой подстановки — из руководства (§ 11.1.6.2.11).
Пример в конфигурации
# события открытий шлёте вы — нужен общий идентификатор
<signals>
    engagement-tracking external
    custom-message-id-header x-my-msgid</signals>
В письме заголовок выглядит так: x-my-msgid: 01234.abc@mysite.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

Типичные ошибки и проблемы

что делают не так и чем это кончается1 ошибка▶

Задают заголовок при отслеживании силами MTA

§ 11.1.6.2.11

Чем чреватоПри значении sparkpost MTA связывает события сам. Строка ничего не добавляет и вводит в заблуждение читающего.
Как заметитьСтрока стоит рядом с engagement-tracking sparkpost.
Как правильноУбрать либо перевести отслеживание на external, если события вы шлёте сами.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Справочные данные
Синтаксис
custom-message-id-header <header-name>
Значения
имя заголовка; значение в письме — до 512 знаков латиницы
Умолчание
none § 11.1.6.2.11
Применение
reload, перезапуск не нужен
Очередь
уже поставленное в очередь не затронет
Где писать
<signals>
Сколько раз
один раз в блоке
Всё здесь — из руководства, с разделом.
Наследование
Наследования нет: строка живёт внутри <signals>, а такой блок на узле один.
Как проверить на узле
Проверять надо по отправленному письму — заголовок должен быть в нём:
grep -i "signals" /var/log/pmta/log | tail -20
Надёжнее посмотреть заголовки письма в контрольном ящике: если заголовка нет, связывать службе нечего.
В Хабе
Цена ошибки
безопасно: неверное значение ничего не ломает
Сценарии
Инфраструктура трекинга