>> Я так
>> понимаю, что sendmail выполняет milter-плагины после проверки заголовков,
> Не совсем так.
> Посмотрите здесь - http://linux.ufaras.ru/sendmail2.html#16.A
> На слово "нерациональность" не обращайте внимания (надо будет заменить чем-то более точным). Благодарю, стало светлее, но пока в голове белый день еще не настал :)
>> Можно ли как-то
>> сделать проверку заголовков уже после выполнения milter-плагинов?
> Средствами sendmail.cf, думаю, нет.
> КАк вам уже подсказали - нужен еще один фильтр.
> Наверное, здесь можно будет использовать milter-manager для выборочного вызова СО и вашего
> фильтра.
> ИЛи откажитесь от идеи делать это на этапе smtp-сессии и используйте procmail.
milter-manager тут излишен, на мой взляд. У меня сейчас мой milter и СО описаны следующим образом:
INPUT_MAIL_FILTER(`sp-milter', `S=local:/var/run/sp-milter.sock, F=T, T=C:1m;S:20s;R:20s;E:1m')dnl
INPUT_MAIL_FILTER(`sokillspam', `S=inet:999@localhost')dnl
define(`confINPUT_MAIL_FILTERS', `sp-milter,sokillspam')dnl
т.к. SMTP-сессия не завершается пока не пройдены все плагины или один из них не отклонил письмо, и моему плагину передаются все заголовки добавленные СО, я совершенно нормально выполняю свою задачу: проверяю, что решила СО и если нужно - отклоняю письмо в рамках SMTP-сессии. Отклонение письма сейчас выглядит так:
# telnet 1.1.1.1 25
Trying 1.1.1.1...
Connected to ok.net.
Escape character is '^]'.
220 ok.net ESMTP Sendmail 8.14.4/8.14.4; Thu, 30 Dec 2010 17:57:07 +0300 (MSK)
helo test
250 ok.net Hello 2.2.2.2.test.ru [2.2.2.2] (may be forged), pleased to meet you
mail from: test@test.ru
250 2.1.0 test@test.ru... Sender ok
rcpt to: test@ok.net
250 2.1.5 test@ok.net... Recipient ok
data
354 Enter mail, end with "." on a line by itself
5555
.
554 5.7.1 Command rejected
quit
procmail - было бы самым легким решением, да, но требования отклонять во время SMTP-сессии не мои, увы.