LINUX.ORG.RU
ФорумAdmin

Postfix фильтр подсчета почты


0

0

Привет!
Возник вопрос как сделать так чтоб пройдя все проверки писмо перед тем как положится в папку пользователю обрабатывалось скриптом и потом ложилось в папку пользователя
Скрипт на перле
выдергивает size и ложит в базу Код:

cat mail
#!/usr/bin/perl

use Net::SMTP;
use DBI;
# GET OPTIONS
# something happend if I get all @ARGV => try shift
my $argv=shift(@ARGV);
my($host,$mail_hello,$mail_from,$mail_to,$nextargv)=split(/::/,$argv,5);
# LOAD MAIL

my $mail_data;
while(<STDIN>) {$mail_data.=$_};
my $size_bytes=length($mail_data);

# SEND MAIL BACK
if($size_bytes>0) {
my $smtp=Net::SMTP->new($host);
$smtp->hello($mail_hello);
$smtp->mail($mail_from);
$smtp->to($mail_to);
# $smtp->cc($mail_cc);
$smtp->data();
$smtp->datasend($mail_data);
$smtp->dataend();
$smtp->quit;
};
$SUBJPREFIX='*';
$mail_data=~s/(
Subject:)(.*?)(
)/$1$2$SUBJPREFIX$3/si;

my $mail_subj=$2;

my $logoutdir='/home/avolon/log';

# LOG
eval {
my ($sec,$min,$hour,$mday,$mon,$year)=localtime(time());
++$mon;
$year+=1900;
my $DATE=sprintf(«%.4d-%.2d-%.2d»,$year,$mon,$mday);
my $TIME=sprintf(«%.2d:%.2d:%.2d»,$hour,$min,$sec);
my $DATIM=«$DATE $TIME»;
my $filename=«$logoutdir/postfix.$DATE.log»;
$filename=~tr/ :/--/;
if(open(FL,«>>$filename»)) {
print FL «$DATE $mail_from $mail_to $size_bytes
»;
$dbh = DBI->connect(«DBI:mysql:host=*.*.*.*;database=test»,«фыв»,«фыв»)
or die «Нет доступа к СУБД!»;
$sth = $dbh->prepare( q{
insert into mail (date,ot,komu,size) values (?,?,?,?)
}) || die «Can't prepare statement: $DBI::errstr»;
$sth->execute(«$DATE»,«$mail_from»,«$mail_to»,«$size_bytes»);
$dbh->disconnect;


close(FL);
};
};


В master.cf Код:



smtp inet n - - - - smtpd
-o content_filter=test
localhost:10027 inet n - n - 10 smtpd


test unix - n n - 5 pipe
flags=q. user=pochta argv=/etc/postfix/mail localhost:10027::localhost::${sender}::${recipient}::





Согласно этому скрипту сейчас все что приходит на почту проходит через этот скрипт и потом дальше!
Но это не вариант так как он считает и спам (((((((
А хотелось бы не посредственно перед тем как положить в ящик!!


Есть ли у кого мысли!


Ответ на: комментарий от Avolon

Я так понял прок майл просто рассовывает по папкам (( А мне надо чтоб после всех филтров приходил на последни где он обрабатывался и выдерал данные от кого кому и обьем

Причем на отправку тоже самое нада ((

Avolon
() автор топика
Ответ на: комментарий от Avolon

Простите, а зачем? pflogsumm напустить на логи горазо проще и скорее всего правильнее. Зачем эта обертка, которая вполне может стать узким местом?

Valmont ★★★
()
Ответ на: комментарий от Avolon

Все равно неправильное решение. Тогда лучше maillog в pipe fifo , завернуть. Оттуда скрипт будет получать инфу и обрабатывать. Потом фигачить инфу «куда-надо». Подумайте, сколько ему информации в одном случае нужно будет обрабатывать, а сколько в другом. А теперь представим, что писем просто выше крыши. Вот ваш перловый скрипт и будет все тормозить.

Valmont ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.