Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> документация —> EXIM —> 4.70 —> часть 45

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


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

  • SMTP через TCP/IP (даемон exim`a, или inetd)
  • SMTP через стандартный ввод и вывод (опция -bs)
  • Пакетный SMTP на стандартном вводе (опция -bS)
       Для доставки почты, доступно следующее:
  • SMTP через TCP/IP (транспорт smtp)
  • LMTP через TCP/IP (транспорт smtp с опцией protocol установленной в lmtp)
  • LMTP через трубу к процессу, работающему на локальном хосте (транспорт lmtp)
  • Пакетный SMTP в файл или трубу (транспорты appendfile и pipe с установленной опцией use_bsmtp)
       
    Пакетный SMTP - имя для процесса, в котором пакеты сообщений сохраняются или читаются из файлов (или труб), в формате в котором команды SMTP используются для вмещения информации конверта.

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

       Исходящий SMTP и LMTP через TCP/IP, выполняется транспортом smtp. Опция protocol - выбирает какой протокол будет использоваться, но, фактическая обработка, одна и та же в обоих случаях.
       Если, в ответе на его команду EHLO, exim`y сообщают, что поддерживается параметр 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. Для дополнительных деталей, смотрите раздел 39.
       Если удалённый сервер оповещает о поддержке команды AUTH, exim сканирует конфигурацию аутентификаторов на любые подходящие клиенту установки, как описано в разделе 33.
       Предполагается, что ответы от удалённых хостов завершаются путём CR, сопровождаемого LF. Однако, известны хосты, которые не посылают символ CR, таким образом, для возможности взаимодействовать с такими хостами, exim обрабатывает LF как самостоятельный признак конца строки.
       Если сообщение содержит несколько различных адресов, все с теми же самыми характеристиками (например, тот же отправитель конверта), резольвящимися к тем же самым наборам хостов, в том же самом порядке, посылаются в одной SMTP транзакции, даже если они для различных доменов, не более чем позволяет установка опции
    max_rcpts в транспорте smtp, в случае чего они разделяются на группы содержащие не более чем max_rcpts адресов в каждой. Если remote_max_parallel - больше одного, каждая группа может быть послана в параллельных сессиях. Порядок хостов с идентичными значениями MX - не существеннен при проверке, могут ли адреса быть пакетными в этом способе.
       Когда транспорт
    smtp переносит временную ошибку не связанную с сообщением, exim обновляет специфическую для транспорта БД, которая содержит записи, индексированные по имени хоста, которые помнят, какие сообщения ждут каждого специфического хоста. Также он обновляет БД повторов, с новыми временами повторов.
       Подсказки повторов exim`a основаны на имени хоста, плюс IP-адрес, таким образом если, один адрес многоадресного хоста будет нерабочим, он будет пропущен в большинстве случаев. Смотрите следующую секцию, для дополнительных деталей о обработке ошибок.
       Когда сообщение успешно доставлено через TCP/IP SMTP-соединение, exim просматривает БД подсказок для транспорта, чтобы увидеть, есть ли любые сообщения в очереди, ожидающие связанного с ними хоста. Если он находит один, он создаёт новый процесс exim`a, используя опцию
    -MC (которая может быть использована процессом запущенным как root или пользователь exim`a) и передаёт ему сокет TCP/IP, чтобы он мог доставить другое сообщение используя тот же самый сокет. Новый процесс производит лишь те доставки, которые сроучены к подклченному хосту, и он может передать сокет третьему процессу, и так далее.
       Опция
    connection_max_messages, транспорта smtp, может быть использована для ограничения числа сообщений отсылаемых через одно TCP/IP соединение.
       Второе и последующие сообщения, отсылаемые в существующем подключении, идентифицируются в главном логе по дополнительной звёздочке после закрывающей квадратной скобки IP-адреса.

    45.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`a. Что происходит фактически - что создаются данные для каждой (хоста, сообщения) комбинации.
       Причина, что таймаут после MAIL и RCPT обрабатывается специальным образом - что иногда он может происходить как результат процедуры проверки удалённым хостом. Exim делает это предположение, и обрабатывает их так, будто получен ответ с временной ошибкой. Таймаут после
    . обрабатывается специальным образом, поскольку известно, что некоторые кривые реализации не могут распознать конец сообщения, если последний символ в последней строке - бинарный ноль. Таким образом, полезно обработать этот случай как ошибку сообщения.
       Таймауты в другие времена, обрабатываются как ошибки хоста, предполагая проблему с хостом, или соединением с ним. Если таймаут после MAIL, RCPT, или
    . - реальная проблема соединения, предполагается, что в следующую попытку таймаут, вероятно, произойдёт в той же точке диалога, вызывая последующую обработку как ошибки хоста.
       Есть экспериментальные свидетельства, что некоторые MTA разрывают соединение после завершающей точки -
    ., если им не нравиться содержимое сообщения по каким-то причинам, в нарушение RFC, который указывает, что надо дать ответ 5xx. Именно поэтому, exim обрабатывает этот случай как ошибку собщения, а не хоста, чтобы не задерживать другие сообщения к тому же хосту.

    45.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`a. Если любой другой пользователь передаётсокет с непривелигированным номером порта, exim выводит сообщение в стандартный поток ошибок, и выходит с кодом ошибки.
       По умолчанию, exim не создаёт вхождения логов для соединения и отключений удалённых хостов (или через даемона, или через
    inetd), если разъединение было ожидаемым. Можно записывать такие вхождения, путём установки селектора логов smtp_connection.
       Команды от удалённого хоста, как предполагается, должны быть завершены CR и LF. Однако, известны хосты не посылающие символ CR. Чтобы быть в состоянии работать с такими хостами, exim обходится с LF как с символом конца строки. Кроме того, поскольку для получения сообщений из всех источников используется общий код, самостоятельный CR интерпретируется как признак конца строки. Однако, последовательность
    CR, точка, CR не завершает входящие по SMTP данные.
       Одна область, иногда дающая начало проблемам, касается команд EHLO или HELO. Некоторые клиенты посылают синтаксически недопустимые версии этих команд, которые, по умолчанию, отклоняются exim`ом. (Это - неимеет отношения к проверке посылаемых данных, таким образом,
    helo_verify_hosts - неуместна.) Вы можете сказать exim`y не применять проверку синтаксиса, путём установки helo_accept_junk_hosts в соответствие кривым хостам, посылающим недопустимые команды.
       Количество доступного дискового пространства проверяется каждый раз при получении команды MAIL, независимо от того, сконфигурирована ли
    message_size_limit или check_spool_space, если smtp_check_spool_space не установлена в ложь. Если места недостаточно, даётся временная ошибка. Если установлена check_spool_space, проверка - на необходимое количество свободного места, плюс значение данное с SIZE, т.е. эта проверка будет проверять, что добавление входящего сообщения не уменьшит место ниже порога.
       Когда сообщение успешно принято, exim включает локальный идентификатор сообщения в его ответ на финальную
    ., которая завершает данные. Если удалённый хост логгирует этот текст, он может помочь в трассировке - что случилось с сообщением.
       Даемон exim`a может огриничить число одновременных входящих соединений, которые он готов обработать (смотрите опцию
    smtp_accept_max). Также, он может ограничить число одновременных вхосдящих оединений от одного удалённого хоста (смотрите опцию smtp_accept_max_per_host). Дополнительные попытки соединения отклоняются, используя 421 код временной ошибки SMTP.
       Даемон exim`a не полагается на сигнал SIGCHLD, для детектирования, когда завершён подпроцесс, поскольку он может потеряться в загруженные моменты. Вместо этого, он при каждом пробуждении ищет завершённые субпроцессы. При условии, что происходят другие события (новые входящие вызовы, запуск обработчика очереди), завершивишиеся процессы уведомляются, и аккуратно убираются. В очень спокойных системах, иногда, вы можете увидеть слоняющиеся
    умершие процессы exim`a. Это не проблема; он будет замечен когда даемон проснётся в следующий раз.
       Когад 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`a. Однако, управление путём средней загрузки, доступно с inetd.
       Exim может быть сконфигурирован на проверку адресов во входящих SMTP командах, как они получены. Смотрите раздел 39, для деталей. Он, также, может быть сконфигурирован на перезапись адресов в это время - до какой-либо проверки синтаксиса. Смотрите раздел 39.9.
       Также, exim может быть сконфигурирован на ограничение частоты, с которой клиентский хост посылает команды MAIL и RCPT в одной SMTP-сессии. Смотрите опцию
    smtp_ratelimit_hosts.

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

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

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

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

    45.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. Значение по умолчанию - *, которое применяет ограничения ко всем хостам. Эта опция средство для того, чтобы вы могли исключить некоторые специфические хосты с плохим поведением, с которыми вы должны жить.

    45.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.

    45.8 Команда ETRN

       RFC1985 описывает команду 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, таким образом, их невозможно изменить перед запуском команды.

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

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

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

    45.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 получателей).

    45.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`a - ноль, лишь есть небыло ошибок. Он - 1, если какие-то сообщения были приняты до детектирования ошибки, и 2 - если не было принятых сообщений.


    =============
    translated by lissyara
    verifying by Gerk





  •  

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

    © lissyara 2006-10-24 08:47 MSK

    Время генерации страницы 0.041 секунд
    Из них PHP: 36%; SQL: 64%; Число SQL-запросов: 56 шт.
    Исходный размер: 66005; Сжатая: 16022