host-id

GlobalХаб задаёт сам

Номер узла, отличающий его идентификаторы писем от чужих
в конфигурации это строкаhost-id 0внутри блока Global
Ноль по умолчанию — одинаковый на всём парке

Умолчание — 0.

Строка нужна ровно двум директивам: add-message-id-header и replace-message-id-header. Она задаёт уникальный на сервер номер, который не даёт двум установкам MTA выдать одинаковый Message-Id.

Проблема, которую она решает, появляется только на нескольких узлах. На одном сервере идентификаторы и так не повторяются; на двадцати с общим умолчанием 0 — могут.

Главная ловушка — умолчание одинаковое у всех. Ноль стоит на каждом узле парка, и совпадение идентификаторов не даёт ни ошибки, ни предупреждения. Обнаруживается оно тогда, когда по идентификатору что-то ищут: разбирают жалобу, ищут письмо в журналах приёмника, сопоставляют отчёт с отправкой.

Вторая половина: строка не проявляется, пока дописывание идентификатора выключено. То есть на узле, где Message-Id всегда ставит подающая сторона, номер узла не делает ничего — и об этом легко забыть при переходе на другую схему подачи.

Что делает Хаб. Пишет — номером узла в Хабе, а он уникален по построению. Значит два сервера парка одинаковый идентификатор не выдадут.

Проверить стоит узлы, заведённые до появления строки в шаблоне: у них могло остаться вендорское 0.

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

Что ставить. Требование одно — уникальность в пределах парка:

Значение Когда
не писать узел один, и другие установки MTA не планируются
своё число всегда на парке — годится любое уникальное

Хаб берёт номер узла в своей базе: он уникален, не меняется и виден в кабинете.

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

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

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

Оставляют умолчание на парке

§ 3.3.1.33

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

Забывают про строку при смене схемы подачи

наш опыт

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