max-rcpt-per-transaction

<domain>

Сколько получателей передаётся приёмнику за одну передачу
в конфигурации это строкаmax-rcpt-per-transaction 1000внутри блока <domain>
Нарезка одного письма на несколько передач

Сколько адресов узел называет приёмнику в одной передаче. Письмо с большим списком уходит не разом, а частями: руководство разбирает это на своём примере — пять тысяч получателей одного домена при пределе в три тысячи передаются дважды, сначала три тысячи, потом оставшиеся две.

Тело письма передаётся каждый раз заново. В этом вся цена настройки. Разрезали список на пять кусков — приёмник получил тело пять раз, и трафик вырос впятеро, хотя писем по-прежнему одно. Руководство называет это прямо: меньшие значения увеличивают параллельность и снижают эффективность.

Что покупается взамен. Куски можно везти по разным соединениям одновременно — одно письмо перестаёт быть одной длинной передачей. На большом списке это разница между «висим на одном соединении» и «разложили на десять».

У директивы два имени. max-rcpt-per-message в этом же блоке — тот же самый предел; руководство говорит об этом прямо, называя одно псевдонимом другого. В своём выводе MTA печатает второе имя, а не это.

Главная ловушка. Цена измеряется в байтах, а не в письмах. Письмо на сто килобайт, разрезанное на пятьдесят кусков, — это пять мегабайт на приёмник вместо ста килобайт. Если на адресе отправки стоит потолок по объёму, съедаться он будет по фактически переданному, то есть в пятьдесят раз быстрее ожидаемого. Уменьшать этот предел «ради параллельности», не пересчитав объём, — верный способ упереться в собственные лимиты там, где их не ждёшь.
Что делает Хаб. Не пишет — ни под этим именем, ни под вторым. Остаётся вендорская тысяча.

Для нашей отправки предел не работает вовсе: прогрев шлёт письма по одному получателю, и резать нечего. Настройка становится осмысленной на узле, куда подают письма с большими списками — там её ставят вместе с числом писем на соединение max-msg-per-connection, а не отдельно.

Рекомендуемые значения

Не трогать, пока список на письмо небольшой. При одном-двух получателях предел не участвует ни в чём. Разговор о нём начинается там, где в письме сотни адресов одного домена.

Считать в байтах, а не в письмах. Прикидка простая: размер тела, умноженный на число кусков, — это то, что уйдёт на приёмник. Уменьшение предела вдвое удваивает трафик, и с этим числом надо сверить потолки по объёму, если они заданы.

Понижать — по просьбе приёмника. Крупные приёмники ограничивают число адресов в транзакции сами и отвечают отказом на лишние. Тогда предел ставят по их правилу, и это единственный случай, когда его выбирают не из соображений скорости.

Порядок расчёта — наша рекомендация. Из руководства здесь умолчание 1000, пример с пятью тысячами получателей и прямое указание, что меньшие значения увеличивают параллельность и снижают эффективность.
Пример в конфигурации
# список режется на куски по сто адресов — тело уедет столько же раз
<domain yahoo.com>
    max-rcpt-per-transaction 100    max-msg-per-connection 5
</domain>
Две строки решают разное: верхняя — на сколько передач резать письмо, нижняя — сколько писем везти в одном соединении. Их считают вместе: мелкая нарезка при малом числе писем на соединение заставляет открывать соединения непрерывно.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

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

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

Понижают ради параллельности, не считая трафик

§ 3.3.10.82

Чем чреватоТело передаётся заново на каждый кусок. Предел, опущенный с тысячи до сотни на списке в тысячу адресов, — это десятикратный рост исходящего объёма к этому приёмнику при том же числе писем.
Как заметитьОбъём отданных байт вырос кратно, число писем не изменилось; потолки по объёму упираются раньше расчётного.
Как правильноПрикинуть размер тела на число кусков до правки и сверить с заданными потолками по объёму. Если параллельность нужна, дешевле добавить соединений, чем резать письмо.

Задают оба имени сразу, считая их разными настройками

§ 3.3.10.83

Чем чреватоИмена — псевдонимы одного поля. Две строки в одном блоке не складываются и не сужают друг друга: действует одна, а вторая создаёт впечатление настройки, которой нет.
Как заметитьВ блоке два предела с разными числами, а MTA печатает одно значение, и оно не всегда то, которого ждали.
Как правильноОставить одно имя на всю конфигурацию. Проверять действующее значение командой настроек очереди, а не чтением файла.

Переносят число из блока подачи

§ 3.3.10.82

Чем чреватоВ блоке подачи одноимённая директива — потолок на приёме с умолчанием 0. Здесь это нарезка передачи с умолчанием 1000. Ноль, перенесённый сюда, руководство не описывает вовсе.
Как заметитьЗначение в блоке приёмника не похоже ни на один реальный размер передачи, а поведение отправки не изменилось.
Как правильноРазличать сторону: приём ограничивает <source>, отправку — этот блок. Числа между ними не переносятся.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Справочные данные
Синтаксис
max-rcpt-per-transaction <integer>
Значения
положительное целое число
Умолчание
1000 § 3.3.10.82
Применение
reload, перезапуск не нужен
Очередь
уже поставленное в очередь не затронет
Где писать
<domain>
Сколько раз
один раз в блоке
Всё здесь — из руководства, с разделом.
Наследование
Значение сливается по совпадающим блокам <domain> от общего к частному: побеждает самое точное совпадение, порядок строк в файле значения не имеет. Второе имя директивы задаёт ровно то же поле — если в конфигурации встретились оба, действует то, что нашлось по более точному блоку. Подхватывается по pmta reload.
Как проверить на узле
Действующее значение печатает команда настроек очереди — под вторым именем:
pmta show settings yahoo.com/mta-news-1
В разделе Queue Settings строка называется max-rcpt-per-message — под этим именем MTA печатает оба псевдонима. Рядом там же видно max-msg-per-connection, с которым этот предел считают вместе.
В Хабе
Цена ошибки
обратимо: вредит, пока стоит
Сценарии
Разобраться с доставляемостью · Настроить темп под провайдера