file-format

<domain>

В каком виде очередь пишет письма в файлы
в конфигурации это строкаfile-format newfile-plainвнутри блока <domain>
Три вида файла на выбор

Работает у очереди вида file (type). Решает, что именно окажется на диске:

  • newfile-plain — умолчание. На каждое письмо свой файл, внутри всё письмо целиком с заголовками. Адресов конверта в нём нет — ни отправителя, ни получателя.
  • newfile-pickup — то же плюс два служебных заголовка, x-sender и x-receiver, куда кладутся адреса из конверта.
  • append-mbox — все письма дописываются в один файл в формате почтового ящика unix.

Файл появляется дважды. Узел сначала создаёт его с окончанием .tmp и переименовывает в .msg, только дописав до конца. Тот, кто разбирает эти файлы, обязан пропускать .tmp — иначе рано или поздно прочитает половину письма.

Главная ловушка — умолчание теряет конверт. newfile-plain пишет письмо как есть, а адреса из конверта в письме не хранятся: получатель конверта и получатель в заголовке To — разные вещи, и при рассылке они расходятся постоянно. Разобрать такой архив «кому уходило» уже нельзя. Нужен newfile-pickup.
Что делает Хаб. Не пишет: очередей вида file он не заводит. Если такая очередь понадобится под архив, брать надо newfile-pickup — Хаб связывает письмо с получателем по конверту, а не по заголовку.
Рекомендуемые значения

newfile-pickup почти всегда лучше умолчания. Он отличается от него двумя строками заголовков, зато сохраняет конверт.

append-mbox — когда писем много и они мелкие. Отдельный файл на письмо при больших объёмах превращает каталог в проблему файловой системы.

Общий файл читайте правильно. Узел держит блокировку на время дописывания; вендор советует брать pmtagetfile, а не читать файл напрямую.

Совет предпочитать newfile-pickup — наш. Из руководства здесь все три вида, умолчание, служебные заголовки newfile-pickup, схема с временным и готовым окончанием имени и рекомендация вендора про доступ к общему файлу.
Пример в конфигурации
# архив с сохранением конверта
<domain archive.example.com>
    type file
    file-destination /var/spool/archive/$isodate/
    file-format newfile-pickup</domain>
При newfile-pickup в каждом файле появятся заголовки x-sender и x-receiver с адресами конверта — по ним архив и разбирают.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

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

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

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

наш опыт

Чем чреватоnewfile-plain не пишет ни отправителя, ни получателя конверта. Заголовок To при рассылке конверту не равен, и восстановить, кому уходило письмо, по архиву уже нельзя.
Как заметитьВ файлах архива нет заголовков x-sender и x-receiver.
Как правильноПоставить newfile-pickup — он отличается ровно этими двумя строками.

Разбирают каталог, не пропуская .tmp

§ 3.3.10.110.1

Чем чреватоУзел создаёт файл с окончанием .tmp и переименовывает в .msg, только дописав. Обработчик, читающий всё подряд, рано или поздно возьмёт недописанное письмо.
Как заметитьВ обработке изредка попадаются обрезанные письма.
Как правильноЧитать только .msg, .tmp пропускать.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Справочные данные
Синтаксис
file-format <enumeration>
Значения
одно из трёх слов: newfile-plain, newfile-pickup или append-mbox
Умолчание
newfile-plain § 3.3.10.110.1
Применение
reload, перезапуск не нужен
Очередь
уже поставленное в очередь не затронет
Где писать
<domain>
Сколько раз
один раз в блоке
Всё здесь — из руководства, с разделом.
Наследование
Значение сливается по блокам <domain> от общего к частному: побеждает наиболее подходящий блок, а не последний по файлу. В очереди другого вида строка игнорируется — присутствует в выводе настроек и ничего не делает. Подхватывается по pmta reload.
Как проверить на узле
Значение печатает команда настроек очереди; вид файлов виден по самому каталогу:
pmta show settings archive.example.com/vmta1 | grep -i file-format
ls -la /var/spool/archive/ | head -10
Файлы с окончанием .tmp в выводе — это письма, которые узел ещё дописывает: их нельзя читать. Хаб очередей вида file не заводит.
В Хабе
Цена ошибки
опасно: последствия переживут откат
Сценарии
Подключить платформу отправки