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

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

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

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

Пакетный 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: ошибки хоста, ошибки сообщения и ошибки получателя.

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

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

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

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

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