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

Ввод сообщений

Сообщения поступают в обработчик в виде стандартного ввода. Обработчик не предполагает выполнение поиска в стандартном вводе.

Ввод содержит заголовки сообщения, пустую строку и тело сообщения. Сообщение заканчивается, когда обнаружен индикатор конца потока. Информация из конверта сюда не входит.

Строки сообщения разделены простым переносом строки.

Вывод обработчика

Обработчик может выдавать следующий вывод при возникновении стандартной ошибки:

  • PASS

    Сообщение должно быть отправлено дальше. Обработчик должен записать сообщение, возможно, с изменениями, в стандартный вывод.

  • STOP

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

  • DEFER

    Сообщение не должно быть отправлено дальше. Должны быть указаны детали временной ошибки. Последующие обработчики при этом не вызываются.

  • REJECT

    Сообщение не должно быть отправлено дальше. Должны быть указаны детали постоянной ошибки. Последующие обработчики при этом не вызываются.

  • LOG text

    Строка текста должна быть рассмотрена как предупреждение или сообщение об ошибке и добавлена в соответствующий журнал.

  • SKIP

    Обработчик не должен обрабатывать и передавать сообщение в свой вывод. Сообщение должно быть отправлено дальше без каких-либо изменений.

Каждая строка вывода при возникновении стандартной ошибки должна оканчиваться переводом строки. После первой строки PASS, STOP, DEFER, REJECT или SKIP дальнейший вывод не принимается, таким образом, любые строки LOG могут предшествовать этой строке.

Код завершения работы обработчика должен быть равен 0 при возникновении строки PASS или STOP и не равен 0 – в остальных случаях.

Вывод сообщения

Обработчик должен записывать данные в свой стандартный вывод только после записи PASS или REJECT при возникновении стандартной ошибки.

Для PASS вывод должен представлять собой сообщение в том же формате, что и на входе.

Код завершения

Код завершения работы обработчика должен быть равен 0 при возникновении строки PASS или STOP и не равен 0 – в остальных случаях.

Контекст вызова

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

Текущая рабочая папка не определена.

Большая часть переменных среды удалена, оставлены только самые необходимые: PATH и LANG. Для последней будет установлено значение C.