SMTPWeasel

Модуль запускает внешние программы, называемые фильтрами, на разных этапах сессии SMTP. Этапы нумеруются начиная с 0, всего таких этапов пять:

  1. Этот фильтр, если он установлен, выполняется сразу после установления входящего SMTP-соединения. На этом этапе единственная информация, которая у нас есть, — это адрес IP клиента и его имя хоста из обратной записи DNS.

  2. Этот фильтр, если он установлен, выполняется после того, как отправитель выдал команду HELO или EHLO, которая указывает (настоящее или поддельное) имя отправляющего хоста.

  3. Этот фильтр, если он установлен, выполняется после того, как отправитель передал команду MAIL FROM, которая указывает (настоящий или поддельный) адрес электронной почты отправителя.

  4. Этот фильтр, если он установлен, выполняется после того как переданы команды MAIL FROM и все RCPT TO, непосредственно перед тем, как отправитель начнёт передачу сообщения электронной почты. Обратите внимание, что на этом этапе отправитель уже отправил команду DATA, это единственный способ узнать, что команд RCPT TO больше не будет, но мы ещё не ответили на эту команду, поэтому фактически передача данных ещё не началась.

  5. Этот фильтр, если он установлен, выполняется после того, как сервер SMTP получил всё сообщение целиком, но до того как он поместил его в локальный почтовый ящик или в очередь на отправку.

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

Фильтры этапов 2-4 могут изменить список получателей. Фильтр этапа 4 может проверить файл сообщения, скопировать его или изменить его содержимое, а затем вернуть код ответа указывающий, должно ли сообщение быть доставлено.

Фильтрам передаётся аргумент - имя текстового файла содержащего информацию об отправителе и получателях в следующем формате:

На этапе 0 файл содержит только первую строку. На этапе 1 есть строки 1 и 2. На этапе 2 есть строки с 1 по 3. На этапах 3 и 4 файл содержит полную информацию. На этапе 4 фильтру передаётся второй аргумент - имя файла в котором записано полученное сообщение.

Имя файла передаваемое фильтрам в качестве первого аргумента после "." содержит идентификатор сессии - строка из нескольких символов, которая следует после SMTP.SRV в лог-файле.

Фильтр должен завершать работу с одним из следующих кодов:

Любой другой код ответа будет обрабатываться как 0 с записью в журнале об ошибке фильтра.