База знаний PMTA›Сценарий

Подключить платформу отправки

записей в сценарии: 107
always-allow-relayingGlobalкритичноХаб задаёт самДирективаТо, ради чего узел вообще отправляет почту, — и то, что делает его открытым релеем, если выдано не тому источнику.default-virtual-mta<source>критичноХаб задаёт самДирективаПрименяется, когда поток не выбран ничем выше — заголовком, правилом или переменной слияния.process-x-virtual-mta<source>критичноХаб задаёт самДирективаРазрешение источнику — с ним заголовок выбирает поток и снимается перед доставкой, без него не делает ничего и уезжает получателю.smtp-listenerGlobalкритичноХаб задаёт самДирективаЕсли не объявлен ни один приёмник, узел молча поднимает его на 0.0.0.0:25.smtp-service<source>критичноХаб задаёт самДирективаВыключение закрывает подачу для источника, не трогая остальных.api-key<transmissions-api>ДирективаСтрока объявляет ключ, который приложение передаёт в заголовке Authorization; директиву повторяют, чтобы завести несколько ключей.invalid-virtual-mta-fallbackGlobalДирективаВместо отказа письмо уходит названным здесь потоком; работает только при подаче и только если отказ выключен в источнике.jobid-prefix<source>ДирективаЗначение приписывается спереди к метке, пришедшей в заголовке; зарезервированное значение подставляет логин подавшего пользователя.process-x-job<source>Хаб задаёт самДирективаРазрешение источнику: с ним значение заголовка становится меткой задания письма, и по ней потом работают отбор в очереди и остановка одной рассылки.reject-invalid-virtual-mta<source>ДирективаУмолчание — отвергать; это же умолчание тихо отменяет запасной поток, пока его не выключить здесь.reserved-smtp-in<source-group>ДирективаРезервирует за группой названное число слотов из общего предела узла: их не займут другие, даже когда узел загружен.source<smtp-user>Хаб задаёт самДирективаПривязывает логин к именованному блоку источника; его настройки действуют после входа и перекрывают то, что дал бы адрес соединения.source<smtp-listener>ДирективаПривязывает приёмник к именованному блоку источника, отменяя для его соединений обычный подбор по адресу.tls-certificate<smtp-listener>ДирективаСертификат и пароль к ключу для соединений именно этого адреса и порта; наследуется от сертификата узла.use-inbound-proxy<smtp-listener>ДирективаТребует заголовок PROXY в начале соединения и берёт настоящий адрес клиента из него; по умолчанию выключено.accept-invalid-recipients<source>ДирективаНеверные по синтаксису адреса принимаются и тут же отбиваются, вместо того чтобы быть отвергнутыми прямо в сессии подачи; доставлены они не будут в любом случае.add-date-header<source>ДирективаДописывает письму дату, когда подающая сторона её не поставила; третье значение переписывает и уже имеющуюся.add-message-id-header<source>Хаб задаёт самДирективаДописывает письму идентификатор, когда подающая сторона его не поставила; уже стоящий не переписывается.add-received-header<source>Хаб задаёт самДирективаОбычное поведение почтового сервера — отметиться в цепочке передачи; выключают ради того, чтобы получатель не видел, откуда письмо подано.allow-mailmerge<source>ДирективаОткрывает подающей стороне команды слияния, которыми одно письмо рассылается многим получателям с подстановкой значений.allow-smtputf8<source>ДирективаОбъявляет расширение SMTPUTF8, разрешая адреса не только из латиницы; отправка при этом не гарантирована — приёмник может его не поддерживать.always-allow-api-submission<source>ДирективаОдна строка вместо перечисления прав, которых требует подача через API вендора; на сегодня равносильна разрешению слияния.await-slot<smtp-listener>ДирективаРешает для одного приёмника, ждать ли освободившийся слот или отвечать отказом; общая для узла строка задаёт то же для всех остальных.command<domain>ДирективаОбязательна для очереди вида pipe; в строке раскрываются подстановки со свойствами письма.disconnect-on-transient-error<source>ДирективаВместо ответа 4xx MTA обрывает соединение — на случай подающей стороны, которая временные отказы обрабатывать не умеет.file-destination<domain>ДирективаПуть с подстановками: дату, домен и получателя можно вставить прямо в имя.file-format<domain>ДирективаФайл на письмо, файл на письмо с адресами конверта или общий ящик mbox.header<pattern-list>ДирективаЕдинственное правило с параметром — сначала имя заголовка, потом образец; сверяется всё содержимое заголовка вместе с пробелами и переносами.http-delivery-url<domain>ДирективаОбязателен для очереди вида http-delivery; абсолютный адрес без учётных данных и строки запроса.immediate-tls<smtp-listener>ДирективаВместо STARTTLS узел начинает шифрование сразу, как только соединение принято; это отдельный способ подачи, обычно на порту 465.inbound-proxy-timeout<smtp-listener>ДирективаПредел ожидания заголовка PROXY в начале соединения; умолчание пять секунд, ноль означает «ждать всегда».jobid-header<source>ДирективаНазывает другой заголовок письма, из которого берётся метка задания; при этом обычный способ и переменная слияния имеют преимущество.mail-from<pattern-list>Хаб задаёт самДирективаСверяет адрес из SMTP MAIL FROM — тот, куда возвращаются отказы, — а не адрес From, который видит получатель.max-message-size<transmissions-api>ДирективаПредел на размер полезной нагрузки запроса к API подачи; множитель размера обязателен, а значение больше двух гигабайт MTA не примет.max-rcpt-per-message<source>ДирективаПотолок на приёме: сколько адресов узел согласен взять в одном письме от подающей системы.max-smtp-in<source-group>ДирективаОграничивает, сколько соединений разом группа источников может держать к узлу; умолчание не ограничивает ничего.pickupGlobalДирективаЗадаёт пару путей: откуда читать поданные файлы и куда складывать те, что обработать не удалось. Каталог поддерживается только один.process-x-schedule<source>ДирективаРазрешение источнику: с ним MTA доставляет письмо только внутри промежутков, названных в заголовке, без него доставляет обычным порядком.rcpt-to<pattern-list>ДирективаСверяет адрес из SMTP RCPT TO; при нескольких получателях поток первого совпадения применяется ко всему письму.relay-debugGlobalДирективаПереводит контроль релея в отладочный режим: вместо окончательного отказа узел отвечает временным, и письмо остаётся у отправителя, а не отбивается.smtp-await-slotGlobalДирективаКогда свободных слотов входящих соединений нет, узел либо ждёт освобождения, либо отвечает приветствием 421 и закрывает соединение.source-group<source>ДирективаНазывает группу, к которой приписан источник; общие для группы пределы задаются в блоке группы, а не здесь.suppress-local-dsn<source>Хаб задаёт самДирективаВыключает письма-отчёты об отказе, задержке и доставке для подачи от этого источника; записи учёта при этом пишутся как обычно.tls-min-version<smtp-listener>ДирективаСамая старая версия протокола, принимаемая на этом адресе и порту; умолчание — TLS 1.2, как и у узла.too-many-rcpts-fails-message<source>ДирективаВместо отказа лишним получателям MTA отвергает письмо на команде DATA; действует вместе с пределом числа получателей.total-max-smtp-inGlobalХаб задаёт самДирективаОграничивает число одновременных входящих соединений SMTP на весь узел.allow-chunking<source>ДирективаРазрешает подающей стороне передавать письмо командой BDAT вместо DATA; умолчание — разрешать.allow-empty-x-virtual-mta<source>ДирективаС этой строкой письмо с пустым заголовком принимается и уходит потоком по умолчанию, без неё — это неверный поток и отказ.auto-qualify-domain<source>Хаб задаёт самДирективаАдрес вида user@host, пришедший в MAIL FROM или RCPT TO, достраивается до полного добавлением суффикса; умолчание — достраивать.date-header-time<source>ДирективаВыбирает между временем приёма письма и временем фактической доставки; действует только там, где дату дописывает сам узел.domain-suffixGlobalДирективаСуффикс, приписываемый к домену из одной части при достройке адресов; работает только вместе с самой достройкой.http-delivery-extra-headers<domain>ДирективаЕдинственное место, куда кладут авторизацию: в самом адресе учётные данные запрещены.log-data<transmissions-api>ДирективаБолее подробная запись, чем журнал запросов API подачи; по умолчанию выключена.log-inbound-proxy<smtp-listener>ДирективаПишет в журнал полученный заголовок PROXY; работает только при включённом приёме такого заголовка.log-requests<transmissions-api>ДирективаПишет в журнал факт каждого запроса Transmissions API; по умолчанию выключено.log-tls<source>ДирективаПодробности согласования шифрования с подающим клиентом в журнал узла; умолчание — не записывать.log-tls<transmissions-api>ДирективаПереключатель подробной записи согласования шифрования при обработке запросов HTTP API; по умолчанию выключен.macro-variables-preserve-case<domain>ДирективаКасается только $to и $from: имя получателя и его домен приводятся к нижнему регистру всегда.mailmerge-expands-undefined-variablesGlobalДирективаС умолчанием неопределённая переменная превращается в пустоту; со значением false она остаётся в письме как есть, вместе со скобками.process-x-envid<source>ДирективаРазрешение источнику: с ним значение заголовка становится идентификатором конверта письма и заголовок снимается, без него он игнорируется и остаётся в письме.replace-message-id-header<source>ДирективаПереписывает уже стоящий Message-Id своим; на письмо без идентификатора не действует вовсе.retain-x-dkim-options<source>ДирективаРешает, увидит ли получатель заголовок с настройками подписи; умолчание — снимать.retain-x-job<source>ДирективаРешает, увидит ли получатель метку задания; работает только тогда, когда чтение заголовка разрешено и заголовок в письме есть.retain-x-schedule<source>ДирективаРешает, увидит ли получатель окна отправки, назначенные письму; умолчание — снимать.retain-x-virtual-mta<source>ДирективаУмолчание — снимать; оставленный заголовок доносит до получателя внутренние имена потоков.smtp-command-timeout<source>ДирективаПредел ожидания данных от подающей стороны во время обмена командами; парная строка к пределу на передачу тела.smtp-data-timeout<source>ДирективаПредел ожидания данных от подающей стороны после команды DATA или BDAT; касается только входящих соединений.tls-ca-file<smtp-listener>ДирективаСписок корневых сертификатов для проверки клиентов на этом входе; наследования от списка узла руководство не обещает.tls-cipher-server-preference<smtp-listener>ДирективаС этой строкой шифр выбирается по нашему порядку, а не по порядку клиента; умолчание — по клиенту.tls-ciphers<smtp-listener>ДирективаСписок допустимых шифров в записи OpenSSL для соединений этого входа; действует по TLS 1.2 включительно.tls-max-version<smtp-listener>ДирективаСамая новая версия протокола, принимаемая на этом адресе и порту; по умолчанию не ограничена.tls-v1.3-ciphersuites<smtp-listener>ДирективаОтдельный список для версии 1.3 на этом входе; умолчание перечисляет пять современных наборов.total-max-transmissions-apiGlobalДирективаСколько подающих соединений по HTTP узел обслуживает разом; MTA верхней границы не проверяет — её задаёт операционная система.pickup-remove-dotGlobalДирективаУступка программам, которые экранируют точку по правилам SMTP там, где этого не требуется — в файлах каталога подхвата.Кому разрешено сдавать почту и для кого её приниматькритичноМеханизмИз коробки узел принимает подачу только с самой машины; два разных вопроса — «кто может слать через нас» и «на чьи адреса мы принимаем» — решаются разными директивами.Заголовки, которыми отправитель управляет доставкойкритичноМеханизмШесть служебных заголовков позволяют подающей стороне выбрать поток, пометить письмо заданием, задать настройки и ключ подписи, идентификатор конверта и расписание; каждый разрешается отдельно и по источникам.Что нужно обвязке подачиМеханизмЧто должно быть на стороне подающего, чтобы обвязка заработала: библиотека, права и членство в группе.Что подающая система собирает перед отправкойМеханизмВсе пять языковых обвязок дают три одинаковых предмета — соединение с узлом, письмо и его получателей, — собираемых в неизменном порядке.Умолчание источника — нижняя ступень, привязанная к тому, кто подключаетсяМеханизмБлок источника, совпавший с адресом отправителя, может назвать поток по умолчанию; он применяется, когда выше по лестнице выбор не сделан.Разбор и правка разметкиМеханизмОтслеживание открытий и переходов в режиме sparkpost правит разметку письма с помощью встроенного разборщика gumbo-parser; письмо, разметку которого разобрать не удалось, по умолчанию отбивается.Персонализация внутри MTAМеханизмПеременные задаются по каждому получателю, а подставляет их узел при доставке — одно поданное письмо уходит многим с разным содержимым.Метрики узла в стандартном форматеМеханизмУзел отдаёт счётчики, датчики и сводки в общепринятом формате: трафик, соединения, ошибки, глубина очереди и задержки.Подача — сетевая служба, и в неё можно войтиМеханизмПодающее приложение соединяется с узлом по имени или адресу и порту — либо без входа, либо с именем и паролем, которые узел настроен принимать.Выбор адреса отправки по содержимому письмаМеханизмРегулярные выражения сопоставляются с заголовком, обратным адресом или получателем и выбирают адрес отправки либо назначают приоритет; списки умеют вызывать друг друга.Как обвязка сообщает об ошибкеМеханизмОбвязка C++ сообщает об ошибке исключением, после которого объект выбрасывают; обвязка C — возвратом признака и отдельным запросом последней ошибки.Формат подачи по HTTPМеханизмВместо готового письма запрос по HTTP может нести отправителя, тему, заголовки, текст, HTML, AMP и вложения отдельными полями — узел сам соберёт и закодирует письмо.Требование к переводам строкМеханизмСтроки подаваемого письма заканчиваются парой CRLF; одиночный LF — самая частая ошибка самописной подающей программы, и разбирают её записью сессии.Слияние через расширения SMTPМеханизмСлияние по SMTP: XMRG вместо MAIL FROM, XDFN с переменными перед каждым получателем и XPRT вместо DATA для каждой части.Авторизация при доставкеМеханизмУзел входит на стороне приёмника логином и паролем из блока <domain> — CRAM-MD5, LOGIN или PLAIN, если приёмник их поддерживает.Подача письма записью файла в каталогМеханизмПисьмо кладётся файлом в каталог, а конверт передаётся особыми заголовками в его начале; MTA забирает файл в спул и доставляет.Пять способов очереди отдать письмоМеханизмОчередь не обязана ходить по SMTP: она умеет писать в файл, запускать программу, стучаться по HTTP или выбрасывать.Поток следует за адресом, на который вы подключилисьМеханизмИменованный блок источника подключается к слушателю и действует на всех, кто соединился с этим адресом и портом, — значит, отправитель выбирает поток выбором точки подключения.Кодировки при подачеМеханизмДанные письма в обвязке добавляются как 7-бит, 8-бит или base64: первые два не меняют данных, кроме перевода одиночного LF в CRLF, base64 кодирует на лету; данные слияния — только 7-бит и 8-бит.Как письмо попадает в MTAМеханизмШесть описанных способов подачи: расширенный SMTP, четыре языковые обвязки и каталог, за которым узел следит на диске.Подача по HTTPS на своём приёмнике, по образцу SparkPostМеханизмОтдельный вход: свой приёмник с сертификатом, свои ключи и зарезервированное имя источника, через которое к такой почте применяются обычные настройки подачи.Заголовок балансировщика на входеМеханизмУзел читает заголовок PROXY в начале входящего соединения и считает источником адрес из него; работает у обоих видов входа.Национальные алфавитыМеханизмФайлы конфигурации — в UTF-8, поэтому национальные домены и адреса пишут как есть; письмо с национальным адресом в конверте уйдёт, только если приёмник поддерживает SMTPUTF8.Обвязка подачи на CМеханизмОбвязка на C: те же операции функциями с приставками PmtaConn, PmtaMsg и PmtaRcpt, с явным выделением и освобождением объектов и запросом последней ошибки.Обвязка подачи на C++МеханизмОбвязка на C++: классы соединения, письма и получателя в трёх заголовочных файлах; ошибка бросает исключение и делает объект негодным.Обвязка подачи на JavaМеханизмОбвязка на Java: pmta.jar в classpath и файл провайдера для JavaMail; описание — в JavaDoc.Первоначальная настройкакритичноПроцедураРуководство требует задать руками две вещи: адрес ответственного и управление ретрансляцией — источники подающих машин с always-allow-relaying; правила приёма нужны, только если узел принимает входящую почту.Разбор приёма писемПроцедураПорядок разбора, когда письма не принимаются: включить журналирование соединений и команд для источника, посмотреть сессию, выключить обратно.<source>критичноБлок конфигурацииПравила для того, кто подключается для подачи: разрешён ли релей, какие управляющие заголовки слушать, какие пределы и нужна ли авторизация.<smtp-listener>Блок конфигурацииНастройки, действующие на соединения одного адреса и порта: шифрование, права через именованный источник, поведение при исчерпании потолка.Подача письма по HTTPТочка APIПринимает письмо JSON-запросом по HTTPS вместо сессии SMTP — с получателями, подстановками и содержимым.ПринятоЗапись учётаПисьмо успешно подано на узел — почтовой сессией или через интерфейс подачи.Задержки на приёмеМетрикаЧисло подач и время по этапам приёма.