user-string

<acct-file>

Постоянная строка, добавляемая к каждой записи учёта
в конфигурации это строкаuser-stringвнутри блока <acct-file>
Метка, по которой узнают источник записи

Строка задаёт произвольный текст, который MTA кладёт в поле userstring каждой записи этого потока.

🔴 Сама по себе она ничего не делает. Поле userstring должно быть перечислено в record-fields — иначе значение просто не попадёт в файл. Ошибки при этом не будет.

Практический смысл — пометить источник. Записи со всех узлов парка стекаются в одно место, и метка отвечает на вопрос «откуда эта строка»: номер узла, площадка, версия конфигурации.

Значение постоянное. Оно не зависит ни от письма, ни от получателя — это свойство блока учёта, а не события.

Главная ловушка — задать строку и не увидеть её в файле. Причина всегда одна: поле userstring не перечислено в наборе полей. При наборе * оно попадает автоматически, при явном перечислении — нет.
Что делает Хаб. Не пишет: узел мы узнаём по адресу вебхука — в нём есть номер узла (/api/telemetry/pmta/<номер>), и приёмник берёт его оттуда.

Строка пригодилась бы, если бы записи собирались из файлов, а не приходили пачками с известного адреса.

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

Метка отвечает на вопрос «откуда запись»:

Значение Когда
не задавать источник известен по другому признаку
номер или имя узла записи со всех узлов стекаются в одно место
версия конфигурации нужно понимать, при какой настройке получены данные

И проверить, что поле userstring попадает в набор — при * оно попадает само.

Требование перечислить поле userstring — из руководства (§ 3.3.11.8). Применения метки — наши.
Пример в конфигурации
# метка попадёт в файл только вместе с полем в наборе
<acct-file /var/log/pmta/acct.csv>
    records d, b
    record-fields d timeLogged,rcpt,vmta,userstring
    user-string node-7-fra</acct-file>
При наборе * перечислять поле не нужно — оно попадёт само. Явный список без него молча съест метку.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

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

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

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

§ 3.3.11.8

Чем чреватоПоле userstring в список не попало, и метка никуда не записывается. Ошибки нет — просто пусто.
Как заметитьСтрока в конфигурации есть, колонки в файле нет.
Как правильноДописать userstring в record-fields для нужного вида записей.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Справочные данные
Синтаксис
user-string <string>
Значения
произвольная строка
Применение
reload, перезапуск не нужен
Очередь
уже поставленное в очередь не затронет
Где писать
<acct-file>
Сколько раз
один раз в блоке
Всё здесь — из руководства, с разделом.
Наследование
Наследования нет: строка живёт внутри своего <acct-file> и метит только его записи. Два потока учёта могут нести разные метки — это обычный способ различить их на приёмной стороне.
Как проверить на узле
Смотрим колонку в самом файле:
head -2 "$(ls -t /var/log/pmta/acct-*.csv | head -1)"
Нет колонки userstring — поле не перечислено в наборе. Колонка есть, но пуста — не задана сама строка.
В Хабе
Цена ошибки
обратимо: вредит, пока стоит
Сценарии
Собрать телеметрию