URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 76986
[ Назад ]

Исходное сообщение
"qmail, отправка почты на другой MX"

Отправлено JEK , 24-Окт-07 10:48 
Подскажите плз как лучше реализовать - всю голову уже сломал...

Нужно чтобы почта, являющаяся локальной на сервере, при этом проверялась на условие прохождения через определённый хоп (mx сервер), либо на наличие заголовка вида X-SpamTest, и если ничего такого в письме нет - отправлялась на mx1.domain.ru. Если же всё в наличии - складывалась в локальные почтовые ящики. При этом такая проверка необходима только для некоторых доменов почтового сервера.

Пробовал через procmail делать - не выходит почему-то. Условия проверки отрабатываются, а sendmail/qmail-remote, запущенный через procmail письма не отсылают.

Через что и как хотябы примерно это можно сделать?


Содержание

Сообщения в этом обсуждении
"qmail, отправка почты на другой MX"
Отправлено aljil , 24-Окт-07 16:01 
>Через что и как хотябы примерно это можно сделать?

Как один из множества вариантов (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). Но сам не пробовал.
Так что удачи! ;-)


"qmail, отправка почты на другой MX"
Отправлено ShyLion , 25-Окт-07 20:29 
>Через что и как хотябы примерно это можно сделать?

Я у себя ставил кумыл с патчем QMAILQUEUE, в качестве обработчика очереди повешал перловый скрипт, который письмо засасывает, анализирует, делает все мыслимые проверки и т.п. и дальше либо скармливает qmail-queue, либо qmail-inject.

qmail-remote и qmail-local, это bз другой немного оперы.


"qmail, отправка почты на другой MX"
Отправлено unlo , 26-Окт-07 12:31 
Всем спасибо, дабил-таки свой путь:

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/sendmail

MAILDIR=$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 и есстественно далее не обрабатывалось. + не указал путь к башу - неправильно отрабатывалась строчка действия.