mail log összesítés emailcímenként

Fórumok

Sziasztok,

Postfixben elég jó hatékonysággal használjuk a restrictions-okat. Persze vannak vele problémák... Szeretnénk azt megcsinálni, hogy minden emailcímnek a napi visszautasított leveleit kiszedjük a logból. Tehát pl:
x.y@domain.hu címre 2 db bejövő levél lett visszautasítva:
vigra@domain.com
sex@domain.biz
Végülis ilyen pflogsumm szerű dolgot...
Ehhez tudtok programot?

Mik

Hozzászólások

postfilter

(Bár a napi report kedvéért csak a report részt nem tudod kiemelni belőle :-)

Udv,
Józsi

Végülis megszületett:


#!/bin/bash
if [ $# -ne 1 ]
then
    echo usage: $0 FILE
    exit 1
fi
    for i in `grep -o 'to=<[^>]*domain.hu>' $1 |sort |uniq`
    do
        email=`echo $i|grep -o '<[^>]*>'|sed -e 's/<//g' -e  's/>//g'`
        if [ `ldapsearch -x -h ldapserver.hu -LLL -b ou=phonebook,ou=People,o=hely,o=ceg,c=HU mail="$email" mail|grep -c mail` -ge 1 ]
        then
            echo "`echo $i|sed -e 's/^to=<//g' -e 's/>//g'` visszautasitott levelei `date --date='1 day ago' +%F` 6:30-tol `date +%F` 6:30-ig" >/tmp/mail.txt
            grep "$i" $1|grep -o 'from=<[^>]*>' |sort |uniq -c >>/tmp/mail.txt
mail -s "visszautasitott levelek `date +%F`" `echo $i|sed -e 's/^to=<//g' -e 's/>//g'` </tmp/mail.txt
        fi
    done
rm /tmp/mail.txt
#done
#EOF - logzabalo.sh

Kis magyarázat:
van egy /var/log/mail-reject.log file, amibe syslog-ng segítségével gyûlnek az 55x-es hibával visszautsított üzenetek. A fenti kis script ebbõl szedi ki és összesíti a to= sorok közül azokat, amely címek az ldap serverben bennevannak, és a usernek elküldi mailben, hogy milyen leveleket nem kapott meg. Értehtõ? :)
Egy probléma van vele, hogy nem épp teljesítményorientált... Ehhez kérnék ötleteket, hogy hogyan lehetne a performaciát javítani? Pl. perl-el biztos 100x hatékonyabban meg lehetne csinálni, csak ahhoz nem értek... Meg más programnyelvekhez sem... Szóval ha valakinek van kedves segíteni, azt megköszönném!

Mik