Exim 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 = ".."
когда используется пакетная 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”.