RussianLDP Рейтинг@Mail.ru
WebMoney: 
WMZ Z294115950220 
WMR R409981405661 
WME E134003968233 
YandexMoney: 
41001198119846 
E-gold:
5128052

Перевод выполнен Алексеем Паутовым в рамках некоммерческого проекта RussianLDP (http://www.rldp.ru/). Именно на этом сайте и надлежит искать новые версии, если таковые будут.

24. Общие опции для транспортов

Следующие общие опции применяются ко всем транспортам:
ИмяИспользование ТипЗначение по умолчанию
body_only transportsboolean ложь

Если эта опция установлена, заголовки сообщения не транспортируются. Эта опция взаимоисключающая с headers_only. Если она используется с транспортом appendfile или pipe, должны быть проверены установки message_prefix и message_suffix, поскольку эта опция не подавляет их автоматически.
ИмяИспользование ТипЗначение по умолчанию
current_directory transportsstring† не задана

Эта опция определяет текущий каталог, который должен быть установлен при работе транспорта, перезадавая любое значение, которое могло быть установлено роутером. Если раскрытие неудачно по какой-либо причине, включая принудительную неудачу, ошибка протоколируется, а доставка задерживается.
ИмяИспользование ТипЗначение по умолчанию
disable_logging transportsboolean ложь

Если эта опция установлена в истину, ничего не протоколируется ни для каких доставок транспортом, и никакие ошибки в журналы не пишутся. Вы не должны устанавливать эту опцию, если не понимаете, что делаете.
ИмяИспользование ТипЗначение по умолчанию
debug_print transportsstring† не задана

Если эта опция установлена, и отладка включена (смотрите опцию командной строки -d), строка раскрывается и включается в отладочный вывод при работе транспорта. Если раскрытие строки неудачно, сообщение об ошибке пишется в отладочный вывод, и exim продолжает обработку. Это средство предоставлено для помощи при проверке значений переменных и т.п. при отладке конфигурации драйвера. Например, если некорректно работает опция headers_add, debug_print может быть использована для вывода зависимых переменных. В текст добавляется символ новой строки, если он им не заканчивается.
ИмяИспользование ТипЗначение по умолчанию
delivery_date_add transportsboolean ложь

Если эта опция истинна, в сообщение добавляется заголовок Delivery-date:. Это даёт актуальное время, когда призошла доставка. Это не стандартный заголовок, у exim есть конфигурационная опция (delivery_date_remove), запрашивающая его удаление из входящих сообщений, таким образом, доставленные сообщения можно безопасно пересылать другим получателям.
ИмяИспользование ТипЗначение по умолчанию
drivertransportsstring не задана

Этим определяется, который из доступных транспортных драйверов будет использоваться. Тут нет значения по умолчанию, и эта опция должна быть установлена для каждого транспорта.
ИмяИспользование ТипЗначение по умолчанию
envelope_to_add transportsboolean ложь

Если эта опция истинна, в сообщение добавляется заголовок Envelope-to:. Этим даётся оригинальный адрес (или адреса) во входящем конверте, который вызвал эту доставку. Может быть представлено более одного адреса, если транспорт сконфигурирован для обработки сразу нескольких адресов, или к одному финальному адресу было переадресовано более одного адреса. Это не стандартный заголовок, у exim есть конфигурационная опция (envelope_to_remove), запрашивающая его удаление из входящих сообщений, таким образом, доставленные сообщения можно безопасно пересылать другим получателям.
ИмяИспользование ТипЗначение по умолчанию
grouptransportsstring† Exim group

Эта опция задаёт gid для выполнения транспортного процесса, перезадавая любое значение, переданное из роутера, а также перезадавая любое значение, ассоциированное с user (смотрите ниже).
ИмяИспользование ТипЗначение по умолчанию
headers_add transportsstring† не задана

Эта опция определяет строку текста, который раскрывается и добавляется в заголовочную часть сообщения при транспортировке, как описано в разделе 43.17. Также дополнительные строки заголовков могут быть заданы роутерами. Если результат раскрытия пустая строка, или раскрытие принудительно неудачно, никаких действий не предпринимается. Другие ошибки раскрытия обрабатываются как ошибки и вызывают задержку доставки.
ИмяИспользование ТипЗначение по умолчанию
headers_only transportsboolean ложь

Если эта опция установлена, тело сообщения не транспортируется. Эта опция взаимоисключаема с body_only. Если она используется с транспортом appendfile или pipe, должны быть проверены установки message_prefix и message_suffix, поскольку эта опция не подавляет их автоматически.
ИмяИспользование ТипЗначение по умолчанию
headers_remove transportsstring† не задана

Эта опция определяет строку текста, который раскрывается в список имён заголовков, эти заголовки опускаются (они в нём остаются, но при передаче сообщения далее они не передаются) из сообщения при транспортировке, как описано в разделе 43.17. Также удаление заголовка может быть задано роутером. Если результат раскрытия пустая строка, или раскрытие принудительно неудачно, никаких действий не предпринимается. Другие ошибки раскрытия обрабатываются как ошибки и вызывают задержку доставки.
ИмяИспользование ТипЗначение по умолчанию
headers_rewrite transportsstring не задана

Эта опция позволяет перезаписывать адреса в строках заголовков во время транспортировки, то есть когда сообщение копируется в его местоназначение. Содержимое опции: список правил перезаписи, разделённых двоеточиями. Каждое правило в той же самое форме, что и общие правила перезаписи, применяемые при передаче сообщения. Они описаны в разделе 31. Например,
headers_rewrite = a@b c@d f : x@y w@z
заменит a@b на c@d в строке заголовка From:, а x@y на w@z во всех строках заголовков, содержащих адрес. Правила применяются к строкам заголовков сразу перед их передачей при транспортировке, таким образом, они затрагивают лишь те копии сообщений, которые проходят через транспорт. Однако, перезаписываются лишь оригинальные строки заголовков и те, которые были добавлены системным фильтром. Если роутер или транспорт добавляет строки заголовков, они не затрагиваются этой опцией. Эти правила перезаписи не применяются к конверту. Вы можете изменить обратный путь, используя опцию return_path, но в этот момент обработки сообщения Вы не можете изменить получателей конверта.
ИмяИспользование ТипЗначение по умолчанию
home_directory transportsstring† не задана

Эта опция определяет установку домашнего каталога для локального транспорта, перезадавая любое значение, которое может быть установлено роутером. Домашний каталог помещается в $home при раскрытии частных опций транспорта. Он также используется как текущий, если текущий каталог не установлен в транспорте опцией current_directory или опцией роутера transport_current_directory. Если раскрытие неудачно по какой-либо причине, включая принудительную неудачу, ошибка протоколируется, а доставка задерживается.
ИмяИспользование ТипЗначение по умолчанию
initgroupstransportsboolean ложь

Если эта опция истинна, и uid процесса доставки предоставлен транспортом, при работе транспорта вызывается функция initgroups() для гарантии, что любые группы, связанные с uid, установлены.
ИмяИспользование ТипЗначение по умолчанию
max_paralleltransportsinteger не задана

Если эта опция установлена и раскрывается в целое число больше 0, это ограничивает число параллельных выполнений транспорта. Управление не относится к теневым транспортным средствам.

Exim осуществляет это управление посредством базы данных подсказок, в которой постепенно увеличивается счетчик всякий раз, когда транспортный процесс создается, и уменьшается, когда процесс заканчивается. Очевидно, есть проблема получения фактического положения дел для счетчиков, если есть катастрофический отказ системы или программы. Чтобы принять меры против этого, Exim игнорирует любые счетчики, которые старше шести часов.

Если Вы используете эту опцию, Вы должны также удалить соответствующую базу данных подсказок всякий раз, когда Ваша система перезагружается. Имена файлов начинаются с misc, они сохранены в каталоге spool/db. Могут быть один или два файла, в зависимости от типа DBM. Те же самые файлы используются для ETRN и транспортного преобразования в последовательную форму smtp.
ИмяИспользование ТипЗначение по умолчанию
message_size_limittransportsstring† 0

Эта опция контролирует размер сообщений, проходящих через транспорт. Она раскрывается до использования, результат раскрытия должен быть последовательностью цифр, опционально сопровождаемых K или M. Если раскрытие неудачно по какой-либо причине, включая принудительную неудачу, или результат не имеет необходимую форму (не цифры или вообще строка текста), доставка задерживается. Если значение больше нуля, и размер сообщения больше этого значения, адрес неудачен. Если есть какой-то шанс, что результирующий рикошет будет маршрутизирован на тот же самый транспорт, Вы должны гарантировать, что return_size_limit меньше, чем message_size_limit транспорта, иначе будет невозможно доставить рикошет.
ИмяИспользование ТипЗначение по умолчанию
rcpt_include_affixes transportsbooleanложь

Когда эта опция ложна (по умолчанию), и адрес, имевший любые префиксы или суффиксы, удалённые из локальной части, доставляется любой формой SMTP или LMTP, префиксы или суффиксы не включаются. Например, если роутер содержит:
local_part_prefix = *-
маршрутизирует адрес abc-xyz@some.domain на SMTP-транспорт, конверт доставляется с
RCPT TO:xyz@some.domain

Это также происходт, когда во время ACL для проверки адреса получателя используется обратный вызов. Однако, если rcpt_include_affixes установлена в истину, в команду RCPT включается полная локальная часть. Эта опция применяется к доставкам BSMTP через транспорты appendfile и pipe, а также к транспортам lmtp и smtp.
ИмяИспользование ТипЗначение по умолчанию
retry_use_local_part transportsboolean смотрите ниже

Когда происходит временная ошибка доставки, в БД подсказок exim создаётся отчёт повтора. Для удалённых доставок ключ для записи повтора основан на имени и/или IP-адресе хоста, вызвавшего ошибку. Для локальных доставок ключ, обычно, весь адрес, включая локальную часть и домен. Это подходит для большинства общих случаев временных ошибок локальной доставки: например, превышение квоты почтового ящика должно вызывать задержку доставки лишь в почтовый ящик с превышением, а не на весь домен. Однако, в некоторых специальных случаях у Вас может возникнуть необходимость обработать локальную ошибку доставки как ассоционированную с доменом, а не со специфической локальной частью. Например, если Вы храните всю почту какого-то домена в файлах. Вы можете это сделать путём установки retry_use_local_part в ложь. Для всех локальных транспортов значение по умолчанию истина. Для удалённых транспортов значение по умолчанию ложь, в целях аккуратности, но изменение значения не оказывает никакого эффекта на удалённый транспорт в текущей реализации.
ИмяИспользование ТипЗначение по умолчанию
return_path transportsstring† не задана

Если эта опция задана, строка раскрывается во время транспортировки и заменяет значение существующего обратного пути (отправителя конверта) в копии доставляемого сообщения. Пустой путь возврата допускается. Эта возможность спроектирована для удалённых доставок, где значение этой опции используется в команде SMTP MAIL. Если Вы установите return_path для локального транспорта, будет единственный эффект: изменится адрес, помещаемый в строку заголовка Return-path:, если она добавляется к сообщению (смотрите следующую опцию). Раскрытие может обратиться к существующиму значению через $return_path. Оно является отправителем конверта сообщения или адресом, установленным опцией роутера errors_to.

Если раскрытие принудительно неудачно, замена не происходит, если неудача по другой причине, доставка задерживается. Эта опция может использоваться для поддержки VERP (Variable Envelope Return Paths, переменные пути возврата конверта): смотрите раздел 46.6.

Отметьте: Если ошибка доставки детектируется локально, включая случай, когда удалённый сервер отклоняет сообщение во время SMTP-диалога, рикошет не посылается по значению этой опции. Он шлётся по ранее установленному адресу для ошибок. Это значение по умолчанию для входящих адресов отправителя, но оно может быть изменено путём опции errors_to в роутере.
ИмяИспользование ТипЗначение по умолчанию
return_path_add transportsboolean ложь

Если эта опция истинна, к сообщению добавляется заголовок Return-path:. Хотя пути возврата обычно доступны в строке префикса почтового ящика BSD, обычно они не отображаются MUA, и таким образом пользователь не имеет к ним лёгкого доступа. RFC 2821 заявляет, что строка заголовка Return-path: добавляется к сообщению, когда доставляющий SMTP-сервер делает финальную доставку. Это подразумевает, что этот заголовок не должен содержатся во входящих сообщениях. У exim есть конфигурационная опция return_path_remove, которая запрашивает удаление этого заголовка из входящих сообщений, таким образом, доставленные сообщения могут быть безопасно пересланы другим получателям.
ИмяИспользование ТипЗначение по умолчанию
shadow_condition transportsstring† не задана

Смотрите ниже опцию shadow_transport.
ИмяИспользование ТипЗначение по умолчанию
shadow_transport transportsstring не задана

Локальный транспорт может установить опцию shadow_transport в имя иного локального транспорта. Удалённые теневые доставки не поддерживаются. Каждый раз, когда доставка на главный транспорт успешна, и/или не задана опция shadow_transport, или её раскрытие не приводит к пустой строке (или одной из строк 0, no, false), сообщение также передаётся теневому транспорту с тем же самым адресом для доставки. Если раскрытие неудачно, никаких действий не предпринимается, исключая принудительное раскрытие, вызывающее запись в протокол. Результат теневого транспорта отбрасывается и не затрагивает последующую обработку сообщения. Предоставлен лишь один теневой уровень: опция shadow_transport игнорируется в любом транспорте, выполняемом как теневой. Опции, связянные с выводом из каналов (pipe), также игнорируются. Строки протоколов для успешной доставки имеют в конце добавленный элемент, вида:
ST=shadow transport name

Если теневой транспорт неуспешен, сообщение об ошибке помещается в конце, в круглых скобках. Теневой транспорт может использоваться для множества различных целей, включая сохранение более детализированной информации, чем обычно предоставляет exim, и осуществления автоматической политики подтверждения, основанной на заголовках, требуемой некоторыми серверами.
ИмяИспользование ТипЗначение по умолчанию
transport_filter transportsstring†не задана

Эта опция устанавливает процесс фильтрации (в смысле UNIX-оболочки) для сообщений во время транспортировки. Это не должно быть перепутано с почтовой фильтрацией, устанавливаемой пользователями индивидуально или через системный фильтр.

Перед выходом сообщения из транспорта, команда, заданная в transport_filter, запускается в отдельном параллельном процессе, и всё сообщение целиком, включая строки заголовков, передаётся ему на стандартный ввод (фактически, это делается от третьего процесса, во избежание тупиков). Команда должна быть задана как абсолютный путь. Строки сообщения, записываемые в транспортный фильтр, завершаются символом новой строки (\n). Сообщение передаётся фильтру до любых SMTP-специфичных обработок, типа преобразования \n в \r\n и экранирования строк, начинающихся с точки, и до любой обработки, подразумеваемой параметрами check_string и escape_string в транспортах appendfile или pipe. Стандартные ошибки для процесса фильтра устанавливается в то же самое местоназначение, что и стандартный вывод: они читаются и пишутся в окончательное местоназаначение сообщения. Процесс, который пишет сообщение в фильтр, сам фильтр и оригинальный процесс, читающий результат и доставляюший его, работают параллельно, как передача через каналы (pipeline) оболочки.

Фильтр может выполнить любые преобразования, какие надо, но, разумеется, необходимо позаботится о том, чтобы не нарушить синтаксис RFC 2822. Демонстрационный скрипт на perl находится в util/transport-filter.pl: он делает несколько произольных модификаций лишь для того, чтобы показать возможности. Exim не проверяет результат, кроме проверки заключительного символа новой строки, когда используется SMTP. Все сообщения, передаваемые через SMTP, должны завершаться символом новой строки, таким образом, exim подставляет его, при его отсутствии.

Транспортный фильтр может использоваться для проведения контентного сканирования на основе пользователей (имеется в виду, что в зависмости от пользователя можно делать разные действия) во время доставки, если единственный эффект от сканирования модификация сообщения. Например, контентное сканирование может вставлять новую строку заголовка, содержащую очки, насчитанные за спам. Это могло бы быть интерпретировано фильтром в пользовательском MUA. На данном этапе, невозможно отказаться от сообщения.

Могут возникнуть проблемы, если фильтр увеличивает размер сообщения, пересылаемого по SMTP-соединению. Если принимающий SMTP-сервер указал поддержку параметра SIZE, exim пошлёт размер сообщения в начале SMTP-сессии. Если то, что фактически посылается, значительно больше, сервер может отклонить сообщение. Это могло бы работать путём установки опции size_addition в транспорте smtp или учитывая дополнения к сообщению, либо вообще отключив использование SIZE. Значение опции transport_filter: строка команды для запуска фильтра, выполняемого непосредственно из exim, а не из оболочки. Строка сканируется exim точно таким же образом, как командная строка для транспорта pipe: exim разбирает её на аргументы, а затем раскрывает каждый параметр отдельно (смотрите раздел 29).

Любой вид ошибки раскрытия вызывает задержку доставки. Специальный параметр $pipe_addresses заменяется аргументами, по одному на каждый доставляемый адрес. Это не идеальное название для этой особенности, но, поскольку оно уже было реализовано для транспорта pipe, показалось разумным не изменять этого. Когда хост удалённый, доступны переменные раскрытия $host и $host_address. Они содержат имя и IP-адрес хоста, на который посылается сообщение, например:
transport_filter = /some/directory/transport-filter.pl \
                   $host $host_address $sender_address $pipe_addresses

Если Вы хотите использовать более сложные элементы раскрытия для создания команд транспортного фильтра, возникают две проблемы, обе вследствие того, что команда разделяется до раскрытия.

  • Если раскрытие элемента содержит пробелы, Вы должны экранировать их кавычками. Если вся опция один элемент раскрытия, Вы должны учесть, какие кавычки используете. Например:
    transport_filter = '/bin/cmd${if eq{$host}{a.b.c}{1}{2}}'
    

    Этим выполняется команда /bin/cmd1, если имя хоста a.b.c, и /bin/cmd2 в ином случае. Если бы использовались двойные кавычки, то они бы удалились exim при чтении значения опции. Когда используется значение, если бы отсутствовали одиночные кавычки, строка была бы разбита на два пункта: /bin/cmd${if и eq{$host}{a.b.c}{1}{2}, и произошла бы ошибка при попытке exim раскрыть первый элемент.

  • За исключением специального случая $pipe_addresses, упомянутого выше, раскрытие не может генерировать несколько параметров или имя команды, сопровождаемое параметрами. Рассмотрите этот пример:
    transport_filter = ${lookup{ \
                       $host}lsearch{/some/file}\
                       {$value}{/bin/cat}}
    

Результат поиска интерпретируется как имя команды, даже если он содержит пустое пространство. Самый простой путь для обхода этого состоит в использовании шелл:
transport_filter = /bin/sh -c \
                   ${lookup{$host}lsearch{/some/file} \
                   {$value}{/bin/cat}}

Процесс фильтра работает под теми же gid и uid, что инормальный процесс доставки. Для удалённых доставок, по умолчанию, это gid/uid пользователя exim. Обычно команда должна приводить к нулевому коду возврата. Код, отличный от нуля, означает, что транспортный фильтр столкнулся с какой-то серьёзной проблемой. Доставка сообщения задерживается, сообщение остаётся в очереди и пробуется позже. Невозможно вызывать рикошет из транспортного фильтра. Если транспортный фильтр установлен на транспорте autoreply, оригинальное сообщение передаётся через фильтр, поскольку оно копируется в новое сгенерированное сообщение, что случается, если установлена опция return_message.
ИмяИспользование ТипЗначение по умолчанию
transport_filter_timeout transportstime5m

Когда exim читает вывод транспортного фильтра, он применяет таймаут, который может быть установлен этой опцией. Превышение таймаута обрабатывается как временная ошибка доставки. Однако, если транспортный фильтр используется с транспортом pipe, таймаут транспортного фильтра обрабатывается таким же образом, как и таймаут непосредственно в канале (pipe). По умолчанию, таймаут жёсткая ошибка, но если истинна опция timeout_defer транспорта pipe, она становиться временной ошибкой.
ИмяИспользование ТипЗначение по умолчанию
usertransportsstring† пользователь exim

Эта опция определяет пользователя, под чьим uid работает процесс доставки, перезадавая любой uid, который мог быть задан роутером. Если пользователь даётся в виде имени, uid ищется из данных пароля, а ассоциированая группа берётся как значение gid для использования, если опция group не задана.

Для доставок, использующих локальные транспорты, пользователь и группа обычно определяются явно или неявно (например, как результат check_local_user) роутером или транспортом.

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

Поиск

 

Найди своих коллег!