Обработка сообщений
Этот процесс состоит из трех частей: данные сообщения считываются обработчиком из стандартного ввода, обрабатываются им, а затем результат операции записывается в стандартный вывод.
Ввод сообщений
Сообщения поступают в обработчик в виде стандартного ввода. Обработчик не предполагает выполнение поиска в стандартном вводе.
Ввод содержит заголовки сообщения, пустую строку и тело сообщения. Сообщение заканчивается, когда обнаружен индикатор конца потока. Информация из конверта сюда не входит.
Строки сообщения разделены простым переносом строки.
Вывод обработчика
Обработчик может выдавать следующий вывод при возникновении стандартной ошибки:
-
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
.