RussianLDP Рейтинг@Mail.ru
WebMoney: 
WMZ Z294115950220 
WMR R409981405661 
WME E134003968233 
Visa 
4274 3200 2453 6495 

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

44. Обработка SMTP

Exim поддерживает множество различных способов использования протокола SMTP и его вариант LMTP, являющийся интерактивным протоколом для передачи сообщений в закрытое хранилище почты приложением. Эта глава содержит детали об обработке SMTP. Для входящей почты доступно следующее:

  • SMTP через TCP/IP (демон exim или inetd).
  • SMTP через стандартный ввод и вывод (опция -bs).
  • Пакетный SMTP на стандартном вводе (опция -bS).

Для доставки почты доступно следующее:

  • SMTP через TCP/IP (транспорт smtp).
  • LMTP через TCP/IP (транспорт smtp с опцией protocol, установленной в lmtp).
  • LMTP через канал к процессу, работающему на локальном хосте (транспорт lmtp).
  • Пакетный SMTP в файл или в канал (транспорты appendfile и pipe с установленной опцией use_bsmtp).

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

44.1. Исходящий SMTP и LMTP через TCP/IP

Исходящий SMTP и LMTP через TCP/IP выполняется транспортом smtp. Опция protocol выбирает, какой протокол будет использоваться, но фактическая обработка одна и та же в обоих случаях.

Если в ответе на его команду EHLO exim сообщают, что поддерживается параметр SIZE, он добавляет SIZE=<n> к каждой последующей команде MAIL. Значение <n> задает размер сообщения плюс значение опции size_addition (по умолчанию 1024) для учёта дополнений к сообщению, типа транспортных заголовков или производимых в транспортном фильтре изменений. Если size_addition отрицательна, использование SIZE подавляется.

Если удалённый сервер оповещает о поддержке PIPELINING, exim использует конвейерное расширение для SMTP (RFC 2197) для уменьшения числа TCP/IP-пакетов, требуемых для транзакции.

Если удалённый сервер оповещает о поддержке команды STARTTLS, а exim собран с поддержкой шифрования TLS, он пробует начать TLS-сессию, если хост не совпадает с hosts_avoid_tls. Для дополнительных деталей смотрите раздел 38.

Если удалённый сервер оповещает о поддержке команды AUTH, exim сканирует конфигурацию аутентификаторов на любые подходящие клиенту установки, как описано в разделе 33.

Предполагается, что ответы от удалённых хостов завершаются путём CR сопровождаемого LF. Однако, известны хосты, которые не посылают символ CR, таким образом, для возможности взаимодействовать с такими хостами exim обрабатывает LF как самостоятельный признак конца строки.

Если сообщение содержит несколько различных адресов, все с теми же самыми характеристиками (например, тот же отправитель конверта), ресолвящимися к тем же самым наборам хостов в том же самом порядке, посылаются в одной SMTP-транзакции, даже если они для различных доменов, не более чем позволяет установка опции max_rcpts в транспорте smtp, в случае чего они разделяются на группы, содержащие не более чем по max_rcpts адресов в каждой. Если remote_max_parallel больше одного, каждая группа может быть послана в параллельных сессиях. Порядок хостов с идентичными значениями MX не существеннен при проверке, могут ли адреса быть пакетными в этом способе.

Когда транспорт smtp переносит временную ошибку не связанную с сообщением, exim обновляет специфическую для транспорта БД, которая содержит записи, индексированные по имени хоста, которые помнят, какие сообщения ждут каждого специфического хоста.

Также он обновляет БД повторов с новыми временами повторов. Подсказки повторов exim основаны на имени хоста плюс IP-адрес, таким образом, если один адрес многоадресного хоста будет нерабочим, он будет пропущен в большинстве случаев. Смотрите следующую секцию для дополнительных деталей об обработке ошибок.

Когда сообщение успешно доставлено через TCP/IP SMTP-соединение, exim просматривает БД подсказок для транспорта, чтобы увидеть, есть ли любые сообщения в очереди, ожидающие связанного с ними хоста. Если он находит один, он создаёт новый процесс exim, используя опцию -MC (которая может быть использована процессом, запущенным как root или пользователь exim) и передаёт ему сокет TCP/IP, чтобы он мог доставить другое сообщение, используя тот же самый сокет. Новый процесс производит лишь те доставки, которые сроучены к подключенному хосту, и он может передать сокет третьему процессу и так далее.

Опция connection_max_messages транспорта smtp может быть использована для ограничения числа сообщений, отсылаемых через одно TCP/IP-соединение.

Второе и последующие сообщения, отсылаемые в существующем подключении, идентифицируются в главном протоколе по дополнительной звёздочке после закрывающей квадратной скобки IP-адреса.

44.2. Ошибки в исходящем SMTP

Три различные вида ошибок распознаются для исходящего SMTP: ошибки хоста, ошибки сообщения и ошибки получателя.

Ошибки хоста: Ошибка хоста не ассоциирована со специфическим сообщением или получателем сообщения. Ошибки хоста:

  • Соединение отклонено или таймаут.
  • Любой ошибочный код в соединении.
  • Любой ошибочный код в EHLO или HELO.
  • Потеря подключения в любое время, кроме как после . .
  • Ошибки ввода-вывода (I/O) в любое время.
  • Таймауты в течение сессии, кроме как в ответ на MAIL, RCPT или . в конце данных. Для ошибки хоста, постоянного ошибочного ответа при соединении или в ответе на EHLO вызывает ошибку всех роутящихся к хосту адресов. Любые другие ошибки хоста вызывают задержку всех адресов и создание данных повторов для хоста. Он не пробуется снова для любого сообщения, пока не наступит его время повтора. Если текущий набор адресов не весь доставляется за этот запуск (к некоторому альтернативному хосту), сообщение добавляется к списку сообщений, ожидающих этот хост, таким образом, если они всё ещё не доставлены, когда произойдут последующие успешные доставки к хосту, оно тоже будет отослано в том же SMTP-соединении.

Ошибки сообщения: ошибка сообщения ассоциирована со специфическим сообщением при посылке к специфическому хосту, но не со специфическим получателем сообщения. Ошибки сообщений таковы:

  • Любые коды ошибки на MAIL, DATA или . в конце данных.
  • Таймаут после MAIL.
  • Таймаут или потеря соединения после ., завершающей данные. Таймаут после команды DATA обрабатывается как ошибка хоста, как потеря соединения в любое другое время.

Для ошибки сообщения постоянный ошибочный ответ (5xx) вызывает ошибку всех адресов и возвращение отчёта об ошибке доставки отправителю. Временный ошибочный ответ (4xx) или один из таймаутов вызывает задержку всех адресов. Для хоста не создаются данные повторов, но вместо этого создаются записи повторов для хоста плюс идентификатор сообщения. Сообщение не добавляется к списку ожидающих этого хоста. Это обеспечивает, что неудачное сообщение не будет послано к этому хосту до истечения времени повтора. Однако, другие сообщения, сроученные к хосту, не затрагиваются, таким образом, если ошибку вызывает какое-то свойство сообщения, она не остановит доставку другой почты.

Если удалённый хост указывает поддержку параметра SIZE в своём ответе на EHLO, exim добавляет к команде MAIL SIZE=nnn, таким образом, огромное сообщение вызовет ошибку, поскольку ошибка придёт в ответ на MAIL.

Ошибки получателя: ошибка получателя ассоциирована со специфическим получателем сообщения. Ошибки получателя таковы:

  • Любой ошибочный ответ на RCPT.
  • Таймаут после RCPT.

      Для ошибки получателя постоянный ответ ошибки (5xx) вызывает ошибку адресов получателей и возврат рикошета отправителю. Ответ временной ошибки (4xx) или таймаут вызывают задержку ошибочного адреса и создание данных повтора для роутинга. Это используется для задержки обработки адресов в последующих запусках очереди, пока не истечёт время повтора роутинга. Это применяется ко всем сообщениям, но, поскольку управляются лишь в запуски очереди, будет сделана одна попытка доставки нового сообщения на неудачный адрес до начала работы задержки. Это гарантирует, что если ошибка реально относится к сообщению, а не к получателю (message too big for this recipient возможный пример), другие сообщения имеют шанс быть доставленными. Если доставка на адрес действительно успешна, информация повтора очищается, таким образом, все придержанные сообщения снова пробуются, а часы повтора сбрасываются.

      Сообщение не добавляется к списку ожидающих этого хоста. Использование хоста для других сообщений не затрагивается, и исключая случай таймаута, другие получатели обрабатываются независимо и могут быть успешно доставлены в текущей SMTP-сессии. После таймаута, разумеется, невозможно продолжить сессию, следовательно, все адреса задерживаются. Однако, остальные, кроме неудачного, не претерпевают последующих задержек. Поэтому, если один получатель вызывает проблемы, остальные имеют шанс на прохождение, когда последующие попытки доставки случаются до времени повтора неудачного получателя.

      Во всех случаях, если есть другие хосты (или IP-адреса) доступные для текущего набора адресов (например, из нескольких MX-записей), они пробуются в этот запуск для любых не доставленных адресов, разумеется, подвергаясь собственным данным повторов. Другими словами, данные ошибок получателя не вступают в силу до следующей попытки доставки.

      Некоторые хосты, как наблюдалось, давали ответ с временной ошибкой на каждую команду MAIL в некоторые моменты времени (было замечено insufficient space, недостаточно места). Было бы хорошо, если бы такие ситуации были распознаны, и данные для хоста задерживались, но это невозможно в текущем дизайне exim. Что происходит фактически: создаются данные для каждой (хоста, сообщения) комбинации.

      Причина, что таймаут после MAIL и RCPT обрабатывается специальным образом: иногда он может происходить как результат процедуры проверки удалённым хостом. Exim делает это предположение и обрабатывает их так, будто получен ответ с временной ошибкой. Таймаут после . обрабатывается специальным образом, поскольку известно, что некоторые кривые реализации не могут распознать конец сообщения, если последний символ в последней строке бинарный ноль. Таким образом, полезно обработать этот случай как ошибку сообщения.

      Таймауты в другие времена обрабатываются как ошибки хоста, предполагая проблему с хостом или соединением с ним. Если таймаут после MAIL, RCPT или . реальная проблема соединения, предполагается, что в следующую попытку таймаут, вероятно, произойдёт в той же точке диалога, вызывая последующую обработку как ошибки хоста.

      Есть экспериментальные свидетельства, что некоторые MTA разрывают соединение после завершающей точки ., если им не нравится содержимое сообщения по каким-то причинам, в нарушение RFC, который указывает, что надо дать ответ 5xx. Именно поэтому exim обрабатывает этот случай как ошибку собщения, а не хоста, чтобы не задерживать другие сообщения к тому же хосту.

      Начиная с версии 4.63, изменена обработка сообщений об ошибках. Когда сообщение об ошибке SMTP задано в модификаторе message в ACL, либо в сообщениях :fail: или :defer: роутера redirect, Exim проверяет начало сообщения на наличие кода ошибки SMTP. Этот код состоит из трех десятичных цифр с последующим пробелом (опционально там еще может быть расширенный код в формате n.n.n, также с последующим пробелом). Если это так, и самая первая цифра совпадает с такой же в коде ошибки по умолчанию, используется код из сообщения. Если же первая цифра неправильная, будет применен код ошибки по умолчанию и в журнал событий запишется критическая ошибка. Это поведение может быть блокировано с помощью установки в роутере redirect параметра forbid_smtp_code в значение true. В этом случае любые коды ошибок SMTP будут молча игнорироваться вообще. Это поведение несовместимо с предыдущими версиями пакета, но есть очень мало конфигураций, где возможны проблемы.

      44.3. Входящие SMTP-сообщения через TCP/IP

      Входящие SMTP-сообщения могут быть приняты одним из двух способов: путём слушающего демона или использования inetd. В последнем случае в /etc/inetd.conf должно быть что-то вроде этого:
      smtp stream tcp nowait exim /opt/exim/bin/exim in.exim -bs
      

      Exim различает этот случай, и случай локально выполняющегося пользовательского агента, использующего опцию -bs путём проверки, является ли стандартный ввод сокетом. Когда это так, тот или другой порт должен быть привелигированным (меньше 1024), или вызывающий должен быть root или пользователь exim. Если любой другой пользователь передаёт сокет с непривелигированным номером порта, exim выводит сообщение в стандартный поток ошибок и выходит с кодом ошибки.

      По умолчанию exim не создаёт вхождения протоколов для соединения и отключений удалённых хостов (через демона или через inetd), если разъединение было ожидаемым. Можно записывать такие вхождения путём установки селектора протоколов smtp_connection.

      Команды от удалённого хоста, как предполагается, должны быть завершены CR и LF. Однако, известны хосты не посылающие символ CR. Чтобы быть в состоянии работать с такими хостами, exim обходится с LF как с символом конца строки. Кроме того, поскольку для получения сообщений из всех источников используется общий код, самостоятельный CR интерпретируется как признак конца строки. Однако, последовательность CR, точка, CR не завершает входящие по SMTP данные.

      Одна область, иногда дающая начало проблемам, касается команд EHLO или HELO. Некоторые клиенты посылают синтаксически недопустимые версии этих команд, которые по умолчанию отклоняются exim. Это не имеет отношения к проверке посылаемых данных, таким образом, helo_verify_hosts неуместна. Вы можете сказать exim не применять проверку синтаксиса путём установки helo_accept_junk_hosts в соответствие кривым хостам, посылающим недопустимые команды.

      Количество доступного дискового пространства проверяется каждый раз при получении команды MAIL, независимо от того, сконфигурирована ли message_size_limit или check_spool_space, если smtp_check_spool_space не установлена в ложь. Если места недостаточно, даётся временная ошибка. Если установлена check_spool_space, проверка на необходимое количество свободного места плюс значение. данное с SIZE, то есть эта проверка будет проверять, что добавление входящего сообщения не уменьшит место ниже порога.

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

      Демон exim может огриничить число одновременных входящих соединений, которые он готов обработать (смотрите опцию smtp_accept_max). Также он может ограничить число одновременных входящих соединений от одного удалённого хоста (смотрите опцию smtp_accept_max_per_host). Дополнительные попытки соединения отклоняются, используя 421 код временной ошибки SMTP.

      Демон exim не полагается на сигнал SIGCHLD для детектирования, когда завершён подпроцесс, поскольку он может потеряться в загруженные моменты. Вместо этого, он при каждом пробуждении ищет завершённые субпроцессы. При условии, что происходят другие события (новые входящие вызовы, запуск обработчика очереди), завершившиеся процессы уведомляются и аккуратно убираются. В очень спокойных системах, иногда, Вы можете увидеть оставшиеся процессы exim. Это не проблема: они будут замечены, когда демон проснётся в следующий раз.

      Когад exim работает как демон, он может резервировать некоторые слоты SMTP для специфических хостов, а также может быть установлен на отклонение SMTP-вызовов от нерезервированных хостов во время высокой загрузки системы, для деталей смотрите опции smtp_accept_reserve, smtp_load_reserve и smtp_reserve_hosts. Проверка загрузки происходит в обих случаях: демоне и inetd.

      Обычно exim запускает процесс доставки для каждого полученного сообщения, хотя это может быть изменено опцией командной строки -odq и опциями queue_only, queue_only_file и queue_only_load. Число одновременно работающих процессов доставки, начатых таким образом из ввода SMTP, может быть ограничено путём опций smtp_accept_queue и smtp_accept_queue_per_connection. Когда тот или другой лимит исчерпан, последующие принятые сообщения просто кладутся во входную очередь без запуска процесса доставки.

      Средства управления, которые связаны с подсчётом входящих вызовов SMTP ((smtp_accept_max, smtp_accept_queue, smtp_accept_reserve) недоступны, когда exim запущен из демона inetd, поскольку в этом случае каждое соединение обрабатывается полностью независимым процессом exim. Однако, управление путём средней загрузки доступно с inetd.

      Exim может быть сконфигурирован на проверку адресов во входящих SMTP-командах, как они получены. Смотрите раздел 39 для деталей. Он также может быть сконфигурирован на перезапись адресов в это время до какой-либо проверки синтаксиса. Смотрите раздел 39.9.

      Также, exim может быть сконфигурирован на ограничение частоты, с которой клиентский хост посылает команды MAIL и RCPT в одной SMTP-сессии. Смотрите опцию smtp_ratelimit_hosts.

      44.4. Нераспознанные SMTP-команды

      Если exim получает более, чем smtp_max_unknown_commands нераспознанных SMTP-команд в одном SMTP-соединении, он разрывает соединение после ответа об ошибке на последнюю команду. Значение по умолчанию для smtp_max_unknown_commands 3. Это оборона против некоторых видов злоупотреблений, которые ломают WEB-серверы для создания соединения к SMTP-портам: в этих обстоятельствах вначале посылаются несколько не-SMTP строк.

      44.5. Синтаксис и ошибки протокола в командах SMTP

      Синтаксическая ошибка детектируется, если команда SMTP распознана, но есть синтаксически неверные данные, например, неверно сформированный адрес электронной почты в команде RCPT. Ошибки протокола включают недопустимую последовательность команд, типа RCPT до MAIL. Если exim принимает более, чем smtp_max_synprot_errors таких команд в одном SMTP-cоединении, он разрывает соединение после отсыла сообщения об ошибке на последнюю команду. Значение по умолчанию для smtp_max_synprot_errors 3. Это защита против кривых клиентов, которые циклически посылают неверные команды (да, было и такое замечено).

      44.6. Использование непочтовых SMTP-команд

      non-mail команды SMTP: все, кроме MAIL, RCPT и DATA. Exim считает такие команды и разрывает соединение если их слишком много в одной сессии SMTP. Это действие ловит некоторые попытки DoS и вещи типа повторяющихся неудачных AUTH или безумных клиентов, циклически посылающих HELO. Глобальная опция smtp_accept_max_nonmail задаёт, как много это "много". Её значение по умолчанию 10.

      Когда ожидается новое сообщение, один RSET не подсчитывается. Этим позволяется клиенту послать один RSET до сообщения (это не так уж и необходимо, но обычно клиенты так делают). Такж, exim позволяет одно неподсчитываемое HELO или EHLO и один STARTTLS до сообщения. После начала сессии TLS ожидается иной EHLO, и он также не подсчитывается.

      Первое возникновение AUTH в соединении или немедленно после STARTTLS также не подсчитывается. Иначе, подсчитываются все иные команды, кроме MAIL, RCPT, DATA и QUIT.

      Вы можете управлять тем, какие хосты подчиняются ограничению, устанавливаемому путём smtp_accept_max_nonmail, путём установки smtp_accept_max_nonmail_hosts. Значение по умолчанию * применяет ограничения ко всем хостам. Эта опция предоставляет средство для того, чтобы Вы могли исключить некоторые специфические хосты с плохим поведением, с которыми Вы должны работать.

      44.7. Команды VRFY и EXPN

      Когда exim получает команду VRFY или EXPN по TCP/IP-соединению, он запускает ACL, заданную путём acl_smtp_vrfy или acl_smtp_expn (соответственно), чтобы решить, должна ли команда быть принята. Если нет заданных ACL, команда отклоняется.

      Когда VRFY принимается, она запускает тот же самый код, как когда exim вызывается с опцией -bv. Когда принимается EXPN, производится одноуровневое раскрытие адреса. EXPN обрабатывается как тестирование адреса (подобно опции -bt), а не проверка (опция -bv). Если как аргумент EXPN даётся неквалифицированная локальная часть, она квалифицируется с qualify_domain. Отклонения команд VRFY и EXPN протоколируются в главном журнале наблюдений и в протоколе отклонённых, а ошибки проверки VRFY пишутся только в главном протоколе для последовательности с ошибками RCPT.

      44.8. Команда ETRN

      RFC 1985 описывает команду SMTP, называемую ETRN, которая спроектирована для борьбы с проблемами безопасности команды TURN (которая вышла из употребления). Когда exim получает команду ETRN в TCP/IP-соединении, он запускает ACL, заданную путём acl_smtp_etrn, чтобы решить, должна ли быть принята команда. Если нет заданных ACL, команда отклоняется.

      Команда ETRN имеет отношение к выпуску сообщений, ожидающих доставки на определённые хосты. Поскольку exim не организовывает свою очередь сообщений по хостам, по умолчанию поддерживается лишь форма ETRN, где текст начинается с префикса #, когда остаток текста задаёт сервер SMTP. Допустимая команда ETRN вызывает запуск exim с опцией -R с остатком от текста ETRN как аргумент. Например:
      ETRN #brigadoon
      
      запускает команду
      exim -R brigadoon
      
      которая вызывает попытку доставки всех сообщений, чей недоставленный адрес содержит текст brigadoon. Когда установлена smtp_etrn_serialize (по умолчанию), exim предотвращает одновременное выполнение более, чем одного запуска очереди с той же самой строкой аргументов как результат команды ETRN. Это останавливает клиентов с плохим поведением от запуска более, чем одного обработчика очереди за раз.

      Exim осуществяет преобразование в последовательную форму при помощи БД подсказок, в которую делается запись при каждом запуске процесса путём ETRN, и удаления, когда процесс завершён. Однако, exim не оставляет сессию SMTP ждать завершения процесса ETRN. Как только ETRN принята, клиенту посылается успешный код возврата. Очевидно, есть границы действия для записей подсказок, так как могла быть системная или программная ошибка (crash). Для принятия мер против этого exim игнорирует любые записи, которые старше шести часов.

      Для большего управления, чем даёт ETRN, может использоваться опция smtp_etrn_command. Она задаёт команду, которая запускается при каждом получении ETRN, вне зависимости от аргументов. Например:
      smtp_etrn_command = /etc/etrn_command $domain $sender_host_address
      

      Строка разделяется на аргументы, которые незавсисмо раскрываются. Переменная раскрытия $domain устанавливается в аргумент команды ETRN, проверки синтаксиса не производится в содержимом аргументов. Exim не ждёт завершения команды, таким образом, код статуса не проверяется. Exim работает под его uid и gid при получении входящего SMTP, таким образом, их невозможно изменить перед запуском команды.

      44.9. Входящий локальный SMTP

      Некоторые пользовательские агенты используют SMTP для передачи сообщений к своим локальным МТА, используя стандарный ввод и вывод, в противоположность передаче конверта в командной строке и записи сообщения в стандартный ввод. Это поддерживается путём опции -bs. Эта форма SMTP обрабатывается точно таким же способом, как и входящие TCP/IP-сообщения (включая использование ACL), исключая то, что отправитель конверта, заданный в команде MAIL, игнорируется, если отправитель не доверенный. В ACL Вы можете детектировать эту форму SMTP-ввода путём проверки на пустой идентификатор хоста. Обычно это первая строка в ACL, которая запускается для команд RCPT:
      accept hosts = :
      

      Этим принимаются SMTP-сообщения от локальных процессов без проверки любыми другими тестами.

      44.10. Исходящий пакетный SMTP

      Оба транспорта (appendfile и pipe) могут быть использованы для обработки пакетного SMTP. Каждый обладает опцией с именем use_bsmtp, которая вызывает вывод сообщений в формате BSMTP. Для этой формы доставки невозможны SMTP-ответы. Всё, что она делает: использует команды SMTP как способ передать конверт вместе с сообщением.

      Сообщение записывается в файл или в канал с предшествующей командой MAIL и RCPT и сопровождаемое строкой, содержащей единственную точку. Строки в сообщении, которые начинаются с точки, имеют дополнительную добавленную точку. Команда SMTP HELO обычно не используется. Если это требуется, для её задания может использоваться опция message_prefix.

      Поскольку обе опции (appendfile и pipe) локальные транспорты, они принмают по умолчанию лишь один адрес получателя одновременно. Однако, Вы можете принять меры для обработки ими нескольких адресов за раз путём установки опции batch_max. Когда это сделано для BSMTP, сообщения могут содержать несколько команд RCPT. Для дополнительных деталей смотрите часть 25.

      Когда один или более адресов роутятся на транспорт BSMTP путём роутера, который установлен списком хостов, имя первого хоста в списке доступно в транспорте в переменной $host. Вот пример такого транспорта и роутера:
      begin routers
      route_append:
        driver = manualroute
        transport = smtp_appendfile
        route_list = domain.example batch.host.example
      
      begin transports
      smtp_appendfile:
        driver = appendfile
        directory = /var/bsmtp/$host
        batch_max = 1000
        use_bsmtp
        user = exim
      

      Он вызывает запись сообщений, адресованных domain.example, в формате BSMTP в /var/bsmtp/batch.host.example с одной копией каждого сообщения (если не более 1000 получателей).

      44.11. Входящий пакетный SMTP

      Опция командной строки -bS заставляет exim принимать одно или более сообщений путём чтения со стандартного ввода, но не производя никаких ответов. Если вызывающий доверенный, оставляется отправитель из команды MAIL. Иначе, отправителем всегда будет вызвавший exim. Неквалифицированные отправители и получатели не отклоняются, но вместо этого просто квалифицируются. HELO и EHLO действуют как RSET. VRFY, EXPN, ETRN и HELP действуют как NOOP. QUIT выход. Для BSMTP-ввода проверки политик не производится. Таким образом, в это время ACL не запускаются. В этом отношении он такой же, как и локальный не-SMTP ввод.

      Если при чтении сообщения обнаружена ошибка, включая отсутствие . в конце, exim немедленно его бросает. Он пишет детали об ошибке на стандартный вывод стилизированным способом, который вызывающая программа могла бы использовать автоматически, например:
      554 Unexpected end of file
      Transaction started in line 10
      Error detected in line 14
      

      Также он пишет более подробную версию для использования людьми в стандартный файл ошибок, например:
      An error was detected while processing a file of BSMTP input.
      The error message was:
      
      501 '>' missing at end of address
      The SMTP transaction started in line 10.
      The error was detected in line 12.
      The SMTP command at fault was:
      
      rcpt to:<malformed@in.com.plete
      1 previous message was successfully processed.
      The rest of the batch was abandoned.
      

      Код возврата из exim 0, лишь есть не было ошибок. Он 1, если какие-то сообщения были приняты до детектирования ошибки и 2, если не было принятых сообщений.

Поиск

 

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