Подскажите плз как лучше реализовать - всю голову уже сломал...Нужно чтобы почта, являющаяся локальной на сервере, при этом проверялась на условие прохождения через определённый хоп (mx сервер), либо на наличие заголовка вида X-SpamTest, и если ничего такого в письме нет - отправлялась на mx1.domain.ru. Если же всё в наличии - складывалась в локальные почтовые ящики. При этом такая проверка необходима только для некоторых доменов почтового сервера.
Пробовал через procmail делать - не выходит почему-то. Условия проверки отрабатываются, а sendmail/qmail-remote, запущенный через procmail письма не отсылают.
Через что и как хотябы примерно это можно сделать?
>Через что и как хотябы примерно это можно сделать?Как один из множества вариантов (MTA=sendmail):
1) перехватить локальную почту через запуск некоего скрипта (в aliases)
Скрипт просто сохраняет письмо в некоторый временный файл (stdin -> tempfile)
2) второй некий скрипт чекает наскирдованные файлы писем на предмет чего надо (хедеры, тело и т.д.), запускать хоть по крону.
3) этот же скрипт отправляет письмо куды надо. Если типа не прошло чек - подсунуть МТА, покоцав хедеры (например, To: . Хотя если используется ЭЦП или какая-то суперпроверка хедеров дальше, то могут быть грабли). Если прошло чек и надо таки доставить локально - просто дописать в хвост соотв. мбокса в /var/mail ( tempfile ->> /var/mail/userbox).
Тоесть некий локал-мейл-фильтр by /dev/hands.
Как второй из множества вариантов - использовать какой-нибудь готовый почтовый фильтр к своему MTA. Какой конкретно - аллах его знает, навскидку для sendmail вроде такое можно замутить с помощью sentinel (http://smfilter.sourceforge.net). Но сам не пробовал.
Так что удачи! ;-)
>Через что и как хотябы примерно это можно сделать?Я у себя ставил кумыл с патчем QMAILQUEUE, в качестве обработчика очереди повешал перловый скрипт, который письмо засасывает, анализирует, делает все мыслимые проверки и т.п. и дальше либо скармливает qmail-queue, либо qmail-inject.
qmail-remote и qmail-local, это bз другой немного оперы.
Всем спасибо, дабил-таки свой путь:SHELL=/usr/local/bin/bash
HOME=/usr/local/psa/qmail/mailnames/domen.ru/user
LOGFILE=$HOME/.procmaillog
LOGABSTRACT=no
VERBOSE=on
FORMAIL=/usr/local/bin/formail
From=`formail -xFrom:`
To=`formail -xTo:`
QMAIL=/usr/local/psa/qmail/bin/qmail-remote.popuser
#From=`formail -xFrom:`
#SENDMAIL=/usr/libexec/sendmail/sendmailMAILDIR=$HOME/Maildir
:0
* ^X-SpamTest-Version.*KAS30/Release
./:0
| /usr/local/bin/formail -I 'Delivered-To' | $QMAIL mx.domain.ru $From $To---------------------------
Тоесть: If есть заголовок - сразу в локальную папку, if not - посылаем дальше на mx.
Что не получалось до этого - письмо имело поле Delivered-To и есстественно далее не обрабатывалось. + не указал путь к башу - неправильно отрабатывалась строчка действия.