add-message-id-header

<source>Хаб задаёт сам

Добавлять ли заголовок Message-Id, если его нет
в конфигурации это строкаadd-message-id-header falseвнутри блока <source>
Без этой строки Gmail режет письма без идентификатора

Умолчание — false. С true MTA дописывает Message-Id письмам, у которых его нет; имеющийся не переписывается — для этого есть отдельная строка replace-message-id-header.

Идентификатор обязателен по стандарту письма, и приёмники — прежде всего Gmail — относятся к его отсутствию как к признаку неаккуратной рассылки.

Уникальность обеспечивает не эта строка, а host-id. Руководство описывает её назначение ровно так: идентификатор сервера, который не даёт двум установкам MTA выдать одинаковый Message-Id. Умолчание там — 0, то есть на парке узлов без явного номера идентификаторы могут совпасть.

Главная ловушка — забыть про номер узла. Строка дописывает идентификатор, и на одном сервере всё выглядит правильно. На парке из десяти узлов с умолчанием host-id 0 два письма могут получить один и тот же Message-Id — а по нему разбирают жалобы и ищут письмо в журналах приёмника.

Совпадение при этом не ошибка MTA и никак не проявляется до того момента, когда по идентификатору что-то ищут.

Что делает Хаб. Пишет true — в источнике подачи с самой машины, в блоке на каждый адрес из «Кому разрешена подача» и в каждом именованном источнике подачи с логином. Причина записана прямо в шаблоне: без идентификатора письма режет Gmail.

Номер узла Хаб задаёт тем же построением: host-id получает номер узла в Хабе, а он уникален. Два сервера парка одинаковый идентификатор не выдадут.

Для самого прогрева строка при этом не срабатывает: библиотека отправки ставит свой Message-Id, и Хаб сохраняет его рядом с записью отправки. Строка страхует чужие платформы подачи.

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

Что ставить. Ответ почти всегда один:

Значение Когда
true всегда, если подача идёт не только от вас — вместе с явным host-id
false (умолчание) подающая платформа заведомо ставит идентификатор сама

Даже во втором случае строка не мешает: имеющийся заголовок она не трогает. Дешевле поставить и не разбираться, что там делает каждая платформа.

Умолчание false и оговорка «имеющийся не переписывается» — из руководства, § 3.3.7.4. Назначение и умолчание номера узла — § 3.3.1.33. Про Gmail — наш опыт, записан в шаблоне конфигурации.
Пример в конфигурации
# номер узла — вторая половина решения, без неё идентификаторы могут совпасть
host-id 7

<source 0/0>
    add-message-id-header true</source>
Первая строка живёт в корне файла, вторая — в источнике. Порознь первая ничего не делает, а вторая на парке узлов даёт совпадающие идентификаторы.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

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

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

Дописывают идентификатор, не задав номер узла

§ 3.3.1.33

Чем чреватоУмолчание номера — ноль, одинаковое на всех узлах парка. Два письма с разных серверов могут получить один и тот же идентификатор, и поиск письма по нему перестаёт быть поиском одного письма.
Как заметитьhost-id отсутствует в конфигурации или равен нулю на нескольких узлах сразу.
Как правильноЗадать каждому узлу свой номер — годится любой уникальный в пределах парка.

Ждут, что строка переделает чужой идентификатор

§ 3.3.7.4

Чем чреватоИмеющийся заголовок она не трогает. Если подающая платформа ставит идентификатор в неудобном виде, эта строка ничего не изменит.
Как заметитьВ письмах остаются идентификаторы платформы, хотя строка включена.
Как правильноДля переписывания есть отдельная директива — но прежде стоит решить, зачем это нужно.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Справочные данные
Синтаксис
add-message-id-header <boolean>
Значения
yes | no | true | false
Умолчание
false § 3.3.7.4
Применение
reload, перезапуск не нужен
Очередь
уже поставленное в очередь не затронет
Где писать
<source>
Сколько раз
один раз в блоке
Всё здесь — из руководства, с разделом.
Наследование
Директива живёт в <source> и подчиняется слиянию источников: соединение попадает под все адресные блоки, которые его накрывают, и узкий перекрывает широкий. Номер узла при этом задаётся в корне файла и на источники не делится — он один на всю установку.
Как проверить на узле
Обе половины проверяются вместе, результат — в доставленном письме:
grep -n 'add-message-id-header\|^host-id' /etc/pmta/config /etc/pmta/virtualhost.txt
Строка host-id 0 или её отсутствие означает, что уникальность идентификаторов между узлами не обеспечена. Сработало ли дописывание — видно по письму без своего идентификатора в контрольном ящике.
В Хабе
Значение
Хаб подбирает сам — темп, стадия прогрева, метрики
Цена ошибки
обратимо: вредит, пока стоит
Сценарии
Подключить платформу отправки