25. Группировка адресов в локальных транспортах
Обычно, лишь удалённый транспорт (
“
smtp
”) сконфигурирован для обработки более одного адреса за раз, таким образом, чтобы когда несколько адресов роутятся к одному хосту, посылалась лишь одна копия сообщения. Однако, локальные транспорты, обычно, обрабатывают одновременно лишь один адрес. Таким образом, транспортировка выполняется для каждого адреса, сроученного к транспорту. Единовременно доставляется лишь одна копия сообщения.
В транспорте
“
appendfile
”, когда сообщение сохраняется в файл для дальнейшей доставки какими-то другими средствами, сохраняется одна копия сообщения с несколькими адресатами, для экономии места.
В транспорте
“
lmtp
”, при доставке через
“локальный SMTP
” другим процессам, сохраняется время, путём доставки одной копии сообщения, и это обычно ожидаемый способ работы LMTP.
В транспорте
“
pipe
”, при передаче сообщения сканирущей программе, или иному доставляющему механизму, типа UUCP, могут быть приемлимы несколько получателей.
Эти три локальных транспорта имеют те же самые опции для контроля многочисленных (
“batched
” - пакетных) доставок, именуемых
“
batch_max
” и
“
batch_id
”. Для сохранения повторения информации для каждого транспорта, эти опции описаны тут.
Опция
“
batch_max
” определяет максимальное число адресов, которые могут быть доставлены вместе, в одном запуске транспорта. Её дефолтовое значение - единица (нет пакетной передачи). Когда более одного адреса роутится на транспорт, имеющий значение
“
batch_max
” больше единицы, адреса доставляются пакетно (т.е. в одном запуске транспорта, с многочисленными получателями), подчиняясь определённым условиям:
Если любая опция транспорта содержит ссылку на
“
$local_part
” - пакетная передача невозможна.
Если любая опция транспорта содержит ссылку на
“
$domain
”, передаются пакетно лишь те адреса, у которых одинаковый домен.
Если
“
batch_id
” установлена, она раскрывается для каждого адреса, и передаются пакетно лишь те адреса, у которых, в результате раскрытия, одинаковое значение. Это позволяет задавать ручные настройки пакетной передачи. Ошибка раскрытия, в любом случае, включая принудительную неудачу, отключает пакетную передачу, но не останавливает доставку.
Пакетные адреса также должны иметь одинаковый обратный адрес (для возврата ошибок доставки), одинаквые добавления и удаления заголовков, одного и того же пользователя и группу для транспорта, и если представлен список хостов, первый хост должен быть тем самым хостом.
В случае транспортов
“
appendfile
” и
“
pipe
”, пакетная передача применяется к ним обоим, когда файл или команда трубы (pipe command) задана в транспорте, и когда это определено роутером
“
redirect
”, но, разумеется, все пакетные адреса должны быть направлены в один и тот же файл или команду трубы. Эти два транспорта имеют опцию называемую
“
use_bsmtp
”, заставляющую их доставлять сообщение в формате
“пакетного SMTP
”, с конвертом представленным в команде SMTP. Опции
“
check_string
” и
“
escape_string
” приводятся к значениям
|
когда используется пакетная SMTP-передача. Полное описание механизма пакетного SMTP дано в разделе 44.10. Транспорт
“
lmtp
” не имеет опции
“
use_bsmtp
”, поскольку он всегда доставляет используя SMTP-протокол.
“
Общая опция
envelope_to_add
” установлена для пакетного транспорта, заголовок
“
Envelope-to:
”, добавляющийся к сообщению, содержит все адреса, которые обрабатываются вместе. Если вы используете пакетный транспорт
“
appendfile
” без
“
use_bsmtp
”, единственный способ сохранить адрес получателя - установить опцию
“
envelope_to_add
”.
“
Если вы используете транспорт
pipe
” без BSMTP, и устанавливаете транспортную опцию
“
command
”, вы должны включить
“
$pipe_addresses
” как часть команды. Это не истинная переменная, это немного шаманства, позволяющего подставить адреса получателей как раздельные аргументы. Этим предоставляется способ обратиться ко всем адресам, доставляемым в пакете. Отметтьте: Это невозможно для команды трубы, заданной путём роутера
“
redirect
”.
=============
Автор перевода: lissyara, оригинал: http://www.lissyara.su/?id=1200