25. Группировка адресов в локальных транспортах
Перевод выполнен Алексеем Паутовым в рамках некоммерческого проекта RussianLDP (http://www.rldp.ru/). Именно на этом сайте и надлежит искать новые версии, если таковые будут.
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 приводятся к значениям:
check_string = "." escape_string = ".." |
Общая опция envelope_to_add установлена для пакетного транспорта, заголовок Envelope-to:, добавляющийся к сообщению, содержит все адреса, которые обрабатываются вместе. Если Вы используете пакетный транспорт appendfile без use_bsmtp, единственный способ сохранить адрес получателя, установить опцию envelope_to_add.
Если Вы используете транспорт pipe без BSMTP и устанавливаете транспортную опцию command, Вы должны включить $pipe_addresses как часть команды. Это не истинная переменная, это немного шаманства, позволяющего подставить адреса получателей как раздельные аргументы. Этим предоставляется способ обратиться ко всем адресам, доставляемым в пакете. Отметьте: это невозможно для команды канала, заданной путём роутера redirect.