Подача почты
записей в теме: 55
always-allow-relayingGlobalкритичноХаб задаёт самДирективаТо, ради чего узел вообще отправляет почту, — и то, что делает его открытым релеем, если выдано не тому источнику.smtp-listenerGlobalкритичноХаб задаёт самДирективаЕсли не объявлен ни один приёмник, узел молча поднимает его на 0.0.0.0:25.source<smtp-user>Хаб задаёт самДирективаПривязывает логин к именованному блоку источника; его настройки действуют после входа и перекрывают то, что дал бы адрес соединения.source<smtp-listener>ДирективаПривязывает приёмник к именованному блоку источника, отменяя для его соединений обычный подбор по адресу.accept-invalid-recipients<source>ДирективаНеверные по синтаксису адреса принимаются и тут же отбиваются, вместо того чтобы быть отвергнутыми прямо в сессии подачи; доставлены они не будут в любом случае.allow-auth<source>ДирективаВыключатель самой возможности входа: с no MTA не объявляет AUTH и не принимает её, и войти под логином становится нечем.allow-smtputf8<source>ДирективаОбъявляет расширение SMTPUTF8, разрешая адреса не только из латиницы; отправка при этом не гарантирована — приёмник может его не поддерживать.always-allow-api-submission<source>ДирективаОдна строка вместо перечисления прав, которых требует подача через API вендора; на сегодня равносильна разрешению слияния.await-slot<smtp-listener>ДирективаРешает для одного приёмника, ждать ли освободившийся слот или отвечать отказом; общая для узла строка задаёт то же для всех остальных.disconnect-on-transient-error<source>ДирективаВместо ответа 4xx MTA обрывает соединение — на случай подающей стороны, которая временные отказы обрабатывать не умеет.max-message-size<source>Хаб задаёт самДирективаБез строки размер не ограничен вовсе — умолчание MTA «unlimited».max-message-size<transmissions-api>ДирективаПредел на размер полезной нагрузки запроса к API подачи; множитель размера обязателен, а значение больше двух гигабайт MTA не примет.max-rcpt-per-message<source>ДирективаПотолок на приёме: сколько адресов узел согласен взять в одном письме от подающей системы.pickupGlobalДирективаЗадаёт пару путей: откуда читать поданные файлы и куда складывать те, что обработать не удалось. Каталог поддерживается только один.process-x-sp-subaccount-id<signals>ДирективаРазрешает подающей стороне назначить субсчёт заголовком письма; номер из заголовка отменяет заданный конфигурацией.process-x-sp-subaccount-id<inline-seeding>ДирективаРазрешает брать номер субсчёта из заголовка письма; по умолчанию выключено.relay-addressGlobalХаб задаёт самДирективаАдресный аналог приёма по домену: принимает конкретный адрес или регулярное выражение, а не весь домен; строку повторяют.relay-debugGlobalДирективаПереводит контроль релея в отладочный режим: вместо окончательного отказа узел отвечает временным, и письмо остаётся у отправителя, а не отбивается.relay-domainGlobalДирективаПеречисляет домены, для которых узел принимает почту независимо от того, кто её подаёт; строку повторяют, и она нужна только там, где узел обслуживает входящую почту.smtp-await-slotGlobalДирективаКогда свободных слотов входящих соединений нет, узел либо ждёт освобождения, либо отвечает приветствием 421 и закрывает соединение.source-group<source>ДирективаНазывает группу, к которой приписан источник; общие для группы пределы задаются в блоке группы, а не здесь.too-many-rcpts-fails-message<source>ДирективаВместо отказа лишним получателям MTA отвергает письмо на команде DATA; действует вместе с пределом числа получателей.total-max-smtp-inGlobalХаб задаёт самДирективаОграничивает число одновременных входящих соединений SMTP на весь узел.allow-chunking<source>ДирективаРазрешает подающей стороне передавать письмо командой BDAT вместо DATA; умолчание — разрешать.auto-qualify-domain<source>Хаб задаёт самДирективаАдрес вида user@host, пришедший в MAIL FROM или RCPT TO, достраивается до полного добавлением суффикса; умолчание — достраивать.domain-suffixGlobalДирективаСуффикс, приписываемый к домену из одной части при достройке адресов; работает только вместе с самой достройкой.max-message-hops<source>ДирективаЗащита от петли: узел не принимает письмо, которое обошло слишком много почтовых систем.smtp-command-timeout<source>ДирективаПредел ожидания данных от подающей стороны во время обмена командами; парная строка к пределу на передачу тела.smtp-data-timeout<source>ДирективаПредел ожидания данных от подающей стороны после команды DATA или BDAT; касается только входящих соединений.total-max-transmissions-apiGlobalДирективаСколько подающих соединений по HTTP узел обслуживает разом; MTA верхней границы не проверяет — её задаёт операционная система.pickup-retry-intervalGlobalустарелаДирективаДиректива помечена в руководстве устаревшей и не описана: ни назначения, ни синтаксиса, ни умолчания там нет.smtp-ipGlobalустарелаДирективаЗамена — smtp-listener: адрес и порт в одной строке, и её присутствие делает эту строку немой.smtp-portGlobalустарелаДирективаВторая половина замененной пары: порт задавался отдельно от адреса, теперь они пишутся одной строкой.Как узел выбирает источник и складывает его настройкикритичноМеханизмСоединение попадает под все блоки источника, чьи адреса его накрывают, и действуют они слитно — узкий перекрывает широкий; именованные блоки подключаются только по прямой ссылке.Заголовок заданиякритичноМеханизмЗаголовок x-job метит письмо заданием; узел читает его, только если источнику разрешено process-x-job, и тогда задание видно в учёте, мониторе и командах паузы.Кому разрешено сдавать почту и для кого её приниматькритичноМеханизмИз коробки узел принимает подачу только с самой машины; два разных вопроса — «кто может слать через нас» и «на чьи адреса мы принимаем» — решаются разными директивами.Занятые имена переменных слияниякритичноМеханизмЧасть имён переменных слияния занята MTA: свои переменные так называть нельзя.Что нужно обвязке подачиМеханизмЧто должно быть на стороне подающего, чтобы обвязка заработала: библиотека, права и членство в группе.Что подающая система собирает перед отправкойМеханизмВсе пять языковых обвязок дают три одинаковых предмета — соединение с узлом, письмо и его получателей, — собираемых в неизменном порядке.Требование к переводам строкМеханизмСтроки подаваемого письма заканчиваются парой CRLF; одиночный LF — самая частая ошибка самописной подающей программы, и разбирают её записью сессии.Слияние через расширения SMTPМеханизмСлияние по SMTP: XMRG вместо MAIL FROM, XDFN с переменными перед каждым получателем и XPRT вместо DATA для каждой части.Подача письма записью файла в каталогМеханизмПисьмо кладётся файлом в каталог, а конверт передаётся особыми заголовками в его начале; MTA забирает файл в спул и доставляет.Как письмо попадает в MTAМеханизмШесть описанных способов подачи: расширенный SMTP, четыре языковые обвязки и каталог, за которым узел следит на диске.Подача по HTTPS на своём приёмнике, по образцу SparkPostМеханизмОтдельный вход: свой приёмник с сертификатом, свои ключи и зарезервированное имя источника, через которое к такой почте применяются обычные настройки подачи.Заголовок балансировщика на входеМеханизмУзел читает заголовок PROXY в начале входящего соединения и считает источником адрес из него; работает у обоих видов входа.Обвязка подачи на .NETМеханизмОбвязка на .NET: руководство только называет папку с описанием — api\dotnet в каталоге установки на Windows — и требует .NET 2.0 или новее.Обвязка подачи на CМеханизмОбвязка на C: те же операции функциями с приставками PmtaConn, PmtaMsg и PmtaRcpt, с явным выделением и освобождением объектов и запросом последней ошибки.Обвязка подачи на C++МеханизмОбвязка на C++: классы соединения, письма и получателя в трёх заголовочных файлах; ошибка бросает исключение и делает объект негодным.Обвязка подачи на JavaМеханизмОбвязка на Java: pmta.jar в classpath и файл провайдера для JavaMail; описание — в JavaDoc.Обвязка подачи на PerlМеханизмОбвязка на Perl: пакет CPAN Port25-Submitter из /opt/pmta/api, собирается и ставится обычным порядком; описание — в perldoc.<source>критичноБлок конфигурацииПравила для того, кто подключается для подачи: разрешён ли релей, какие управляющие заголовки слушать, какие пределы и нужна ли авторизация.<smtp-listener>Блок конфигурацииНастройки, действующие на соединения одного адреса и порта: шифрование, права через именованный источник, поведение при исчерпании потолка.<source-group>Блок конфигурацииСобирает источники в группу, чтобы пределы входящих соединений действовали на них вместе; участники называют группу у себя.Подача письма по HTTPТочка APIПринимает письмо JSON-запросом по HTTPS вместо сессии SMTP — с получателями, подстановками и содержимым.Задержки на приёмеМетрикаЧисло подач и время по этапам приёма.