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

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

47. Использование exim как клиента без очереди сообщений

На персональном компьютере обычным требованием является отсылка почты на умный хост (smart host). Существует множество MUA, которые могут быть сконфигурированы для работы таким образом, под все популярные операционные системы. Однако, некоторые MUA для UNIX-подобных систем не могут быть так сконфигурированы: они посылают сообщения, используя интерфейс командной строки /usr/sbin/sendmail. Кроме того, таким способом сообщения посылают утилиты типа cron.

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

Поэтому, существуют требования для предоставления интерфейса /usr/sbin/sendmail, но доставки сообщений к умному хосту без средств организации очередей и повторов. Кроме того, доставка на умный хост должна быть синхронной, чтобы в случае её неудачи немедленно послать информацию MUA. Другими словами, нам необходимо что-то, что расширяет MUA, который передаёт на локальный MTA через командную строку, таким образом, чтобы оно вело себя подобно удалённому умному хосту, использующему TCP/SMTP.

Есть множество приложений (например, одно называется ssmtp), которые проделывают эту работу. Однако, люди находят их в разной степени недостаточными. Например, Вы могли бы желать завершения алиасинга и форвардинга до отсылки сообщения на умный хост.

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

Есть глобальная булевая опция, называемая mua_wrapper, по умолчанию установленная в ложь. Установка mua_wrapper в истину вызывает работу exim в специальном режиме, в котором он, как предполагается, используется для обёртки командной строки MUA в вышеописанной манере. При установке mua_wrapper, также необходимо предоставить совместимую конфигурацию роутера и транспорта. Чаще всего бывает лишь один роутер и один транспорт, отсылающий всё на умный хост.

Когда exim работает в режиме обёртки MUA, его поведение меняется следующим образом:

  • Демон не может быть запущен, также exim не может принимать входящие сообщения от inetd. Другими словами, есть лишь один способ приёма сообщений: через командную строку.
  • Каждое сообщение синхронно доставляется как только оно принято (предполагается -odi). Все опции, касающиеся организации очередей (queue_only, queue_smtp_domains, control в ACL и т. п.) тихо игнорируются. Принимающий процесс exim не завершается, пока не завершится попытка доставки. Если доставка успешна, выдаётся нулевой код возврата.
  • Переадресация адресов разрешена, но финальный роутинг для всех адресов должен приводить к одному и тому же удалённому транспорту, и к тому же самому списку хостов. Кроме того, адрес возврата (отправитель конверта) должен быть одним и тем же для всех получателей, как и любые добавленные или удалённые строки заголовков. Другими словами, должно быть возможным доставить сообщения в одной SMTP-транзакции, несмотря на множество получателей.
  • Если эти условия не выполняются, или если роутинг любого адреса приводит к ошибке или статусу отсрочки, либо если exim не в состоянии успешно доставить всех получателей на один из умных хостов, доставка всего сообщения неудачна.
  • Поскольку очереди не разрешены, все ошибки рассматриваются как постоянные: между кодами 5xx и 4xx, выданными в SMTP-ответе умного хоста, различий не делается. Более того, поскольку вызывающему можно дать лишь один ответ yes/no, невозможно доставить одних получателей и не доставить других. Если происходит ошибка (временная или постоянная) для любого получателя, все они неудачны.
  • Если перечислен более, чем один умный хост, exim будет пробовать обычным способом другой хост, после ошибки соединений или таймаута. Однако, если этот вид ошибки происходит для всех хостов, доставка неудачна.
  • Когда доставка неудачна, сообщение об ошибке пишется в стандартный поток ошибок (так же, как и в протокол exim), и exim выходит, возврашая вызвавшему код возврата 1. Сообщение вычёркивается из файлов спула exim. Рикошет не генерируется.
  • Данные повторов не обслуживаются, и любые правила повторов игнорируются.
  • Множество опций exim игнорируется: deliver_drop_privilege принудительно успешна, max_rcpt в транспорте smtp принудительно приводится к unlimited, remote_max_parallel принудительно приводится к единице, а запасные хосты игнорируются.

Общий эффект, что exim создаёт одну синхронную попытку доставки сообщения, приводя к неудаче при любом виде проблем. Поскольку локальные доставки не производятся, и демон не может быть запущен, exim не нуждается в root-привилегиях. По возможности, он должен работать как setuid exim вместо setuid root. Смотрите раздел 51.3 для обсуждения о примуществах и неудобствах запуска без root-привилегий.

Поиск

 

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