Global
Значение — путь к файлу, а не сам текст: тело отчёта о неудаче слишком велико для строки конфигурации.
В шаблоне подставляются девять значений исходного письма:
| Подстановка | Что даёт |
|---|---|
| hostname | имя узла, сформировавшего отчёт |
| originator | отправитель исходного письма |
| recipient | получатель, до которого не дошло |
| subject | тема исходного письма |
| date | дата формирования отчёта |
| timeQueued | когда письмо встало в очередь |
| retryAfter | интервал повторов |
| bounceAfter | срок, после которого письмо отбивается |
| response | ответ приёмника — то, ради чего отчёт и читают |
Тем же набором пользуются соседние строки — шаблон темы dsn-failed-subject-template и шаблон заголовка отправителя dsn-failed-from-template.
Из девяти значений одно важнее прочих: ответ приёмника. Именно по нему человек понимает, что случилось, — остальное обрамление.
Вторая половина мельче, но того же рода: в примере файл назван /usr/joe/dsn-body-template.txt, а заголовок следующего блока объявляет содержимое файла /usr/admin/dsn-body-template.txt. Пути разные, и это опечатка вендора.
Практический вывод один: шаблон проверять письмом, а не чтением. Неверная подстановка не вызовет ошибки — она просто останется в тексте как есть.
Всё, что содержит отчёт, у нас приезжает записями учёта через вебхук: и ответ приёмника, и время постановки в очередь, и адреса. Оформлять эти данные письмом незачем.
Что ставить. Путь к файлу; правила приходят из назначения:
| Свойство | Почему |
|---|---|
| файл рядом с конфигурацией | читается процессом узла, и права нужны те же |
| ответ приёмника в тексте обязателен | без него отчёт не объясняет ничего |
| без внутренних имён и адресов | отчёт уходит наружу, отправителю письма |
Сам файл читается при формировании отчёта, а не при загрузке конфигурации, — значит правка вступает в силу без перечитывания.
# три строки задают отчёт целиком: заголовок, тема и тело из файла dsn-failed-from-template "${hostname} <postmaster@abc.com>" dsn-failed-subject-template "Email failed, Re: ${subject}" dsn-failed-body-template-from /etc/pmta/dsn-body-template.txt
что делают не так и чем это кончается2 ошибки▶
§ 3.3.1.31
наш опыт
1 связь
dsn-failed-from-templateGlobalТам перечислен набор подстановок, общий для всех трёх шаблонов отчёта. § 3.3.1.29dsn-failed-subject-templateGlobalТам перечислен набор подстановок, общий для всех трёх шаблонов отчёта. § 3.3.1.30suppress-local-dsn<source>Подавление отменяет все настройки вида отчёта разом: письма, которое нужно оформлять, просто не будет. § 3.3.7.30
grep -n 'dsn-failed\|custom-dsn-from-header\|suppress-local-dsn' /etc/pmta/config ls -l /etc/pmta/dsn-body-template.txt
3 статьи
◇Кому разрешено сдавать почту и для кого её приниматьИз коробки узел принимает подачу только с самой машины; два разных вопроса — «кто может слать через нас» и «на чьи адреса мы принимаем» — решаются разными директивами.◇Два обработчика входящих отчётов и что с ними делатьОтказы письмом и жалобы разбираются двумя одинаково устроенными блоками; у каждого свой список адресов и своя пара решений о судьбе письма.◇Списки адресов — именованные и безымянныеСписок адресов, доменов, образцов или хешей; именованный подключается директивами вроде подавления, безымянный живёт внутри процессора входящей почты.