критично
Руководство определяет четыре типа значений в отдельном коротком разделе, а дальше просто ссылается на них из сотен директив. Знать эти четыре — значит понимать грамматику любой строки конфигурации.
Логическое. Четыре написания на два значения: yes, no, true, false. Всё это MTA принимает наравне, поэтому тот, кто читает конфигурацию, обязан считать все четыре равнозначными, а тот, кто её пишет, — выбрать одно написание и держаться его.
Промежуток времени. Строка вроде 1w2d12h или 300s, где w — недели, d — дни, h — часы, m — минуты, s — секунды. Части складываются подряд, без пробелов и знаков. Отдельного поля единицы измерения в руководстве нет нигде: единица всегда внутри значения.
Регулярное выражение. Совместимое с Perl (PCRE), пишется между косыми: /^421 .* too many errors/. Диалект чужой и полный — подробности на странице regex-dialect.
Образец домена. Пять форм, и именно их стоит запомнить: они встречаются в каждом блоке, который что-то сопоставляет с доменом. Разница между двумя из них — ловушка, и о ней ниже.
Разночтение в логических значениях безобидно для MTA, но неудобно человеку, который читает готовый файл: две формы в одном файле выглядят как разница смысла, которой нет.
Регулярные выражения Хаб не пишет вовсе — правила по образцу он собирает списком доменов, а не выражением.
Что писать, когда пишете руками:
| Тип | Форма | На что смотреть |
|---|---|---|
| логическое | yes или no | выбрать одно написание на весь файл |
| промежуток | 10m, 4d12h, 300s | единица обязательна: голое число это не промежуток |
| выражение | /…/ между косыми | диалект PCRE, экранирование как в Perl |
| образец | [*.]домен | почти всегда эта форма, а не *.домен |
Промежуток без единицы — не промежуток. Строки вроде bounce-after 4 руководство не описывает: у типа единица всегда внутри значения, и голое число здесь не имеет смысла.
Про образцы двух видов сказано и на странице domain-matching — там же пример руководства, где обе формы стоят рядом и видно, чем они отличаются на живом конфиге.
# четыре типа в четырёх строках <domain [*.]example.com> use-starttls yes # логическое: yes | no | true | false bounce-after 4d12h # промежуток: w d h m s подряд max-msg-rate 500/h </domain> <smtp-pattern-list too-many> reply /^421 .* too many errors/ mode=backoff # выражение PCRE </smtp-pattern-list>
что делают не так и чем это кончается3 ошибки▶
§ 3.2
§ 3.2
§ 3.2
1 связь
Главный файл конфигурации узлаТот файл, который этими четырьмя типами и написан. § 3.2
relay-addressGlobalЗначением может быть регулярное выражение, а у него свой разбор. § 3.2Списки адресов — именованные и безымянныеОбразцы в списке — регулярные выражения того же диалекта, что и везде в конфигурации. § 3.2address<address-list>Образец в косых чертах — регулярное выражение того же диалекта, что и везде в конфигурации. § 3.2body-pattern-file<email-patterns>Значение — регулярное выражение, и правила диалекта общие с остальной конфигурацией. § 3.2allow-smtputf8<source>Международный адрес — отдельный вид значения, а не обычная строка: разбор у него свой. § 3.1Как складывается политика для приёмникаФормы образца описаны там, включая ловушку со звёздочкой и точкой. § 3.2
pmta test config pmta show settings example.com/mta-news-1
3 статьи
◇Принять, направить, доставитьПуть письма внутри узла: принять, решить куда, доставить — и между этими тремя шагами живут все настройки.◇Перезагрузка настроек против перезапуска службыКонфигурация читается при старте, дальше правки подхватываются командой перезагрузки — кроме тех директив, которые руководство помечает как требующие перезапуска.◇Как узел выбирает источник и складывает его настройкиСоединение попадает под все блоки источника, чьи адреса его накрывают, и действуют они слитно — узкий перекрывает широкий; именованные блоки подключаются только по прямой ссылке.