[Postfix-br] Post-la

mateus schott mateusschott em gmail.com
Terça Outubro 29 09:13:59 BRST 2013


Seria esse??

#!/bin/bash

if [ -r /etc/post-la2/post-la.conf ]; then
        . /etc/post-la2/post-la.conf
else
        echo "Nao foi possivel carregar as configuracoes de
/etc/post-la2/post-la.conf"
        exit 1
fi

printf "\n"
printf "#\n"
printf "# POST-LA (Postfix Log Analyzer) v2.0 \n"
printf "\n"
printf "Inicio Processamento: $(date "+%D-%T")...\n"

#Definindo Variaveis
YEAR="$(date +%Y)"
YN="NULL|$(date +%Y)"

function validos(){
        printf "Filtrando mensagens validas..."
        PID="$(grep -E '(delivered (to mail|via jeguepanel|to command |via
maildrop service)|Ok: queued as)' $LOG |awk {'print $6'} |sed 's/://g' |
uniq)"
        printf " ok\n"

        printf "Pegando tamanho das mensagens..."
        tamanho="$(awk '$8~/^size=/{SIZE=gensub(/[^0-9]/,"","G",$8)/1024;
printf "%s%.2f\n", $6,SIZE}' $LOG | sort -u)"
        printf " ok\n"

        printf "Pegando destinatarios..."
        destinatarios="$(cat $LOG |grep "to=<" |grep Ok |awk {'print $6"
"$7'} |sed 's/to=<\|>\|://g')"
        printf " ok\n"

        printf "Pegando assunto e remetente..."
        assunto="$(awk ' /POST-LA/ {
                subj=""
                for (i=10;i<=NF;i++){ if ($i=="from") {j=i;i=NF} else
{subj=subj" "$i} } print $1"-"$2"|"$3"|"$6"|"subj"|"$(j+2) }' $LOG )"
        printf " ok\n"

        printf "Arrumando data..."
        sed
's/^Jan/'$YEAR'-01/;s/^Feb/'$YEAR'-02/;s/^Mar/'$YEAR'-03/;s/^Apr/'$YEAR'-04/;s/^May/'$YEAR'-05/;s/^Jun/'$YEAR'-06/;s/^Jul/'$YEAR'-07/;s/^Aug/'$YEAR'-08/;s/^Sep/'$YEAR'-09/;s/^Oct/'$YEAR'-10/;s/^Nov/'$YEAR'-11/;s/^Dec/'$YEAR'-12/;s/\(from=\|<\|>\)//gi'
<<<"$assunto" > $TMPDIR/assunto1.tmp
        printf " ok\n"

        printf "Convertendo charset..."
        php -f /etc/post-la2/convert.php $TMPDIR/assunto1.tmp >
$TMPDIR/assunto.tmp
        rm -rf $TMPDIR/assunto1.tmp
        printf " ok\n"

        printf "Gerando arquivo para importar ao MySQL..."
        > $TMPDIR/messages.tmp
        for ID in $PID
        do
                registro="$(grep $ID $TMPDIR/assunto.tmp |sed 's/:|/|/g'
|tail -1)"
                if [ ! -z "$registro" ]; then
                        tam="$(awk -F ":" '/'$ID'/ {printf $2}' <<<
"$tamanho" |tail -1)"
                        dest="$(awk '/'$ID'/ {printf tolower($2)}' <<<
"$destinatarios" |sed 's/,$//;s/,/, /g')"
                        echo "NULL|$registro|$tam|$dest" >>
$TMPDIR/messages.tmp
                fi
        done
        # done <<< "$PID"
        rm -rf $TMPDIR/assunto.tmp
        printf " ok \n"
}

function import_mails(){
        printf "Importando dados para MySQL..."
        mysql -u$dbuser -p$dbsenha -e "load data infile
'$TMPDIR/messages.tmp' into table mails fields terminated by '|'" $database
        rm -rf $TMPDIR/messages.tmp
        printf " ok \n"
}

function invalidos(){
        reject_postfix
        #reject_amavis
        reject_bounced
        arruma_data_reject
}
function reject_postfix(){
        awk '/reject:/{
                ERRO=""
                ERRO2=""
                for (i=7;i<=NF;i++){
                        if (match($i,/from=</)){
                                FROM=$i
                                for (j=7;j<i;j++){
                                        ERRO=ERRO" " $j
                                }
                        }
                        if (match($i,/to=</)){
                                TO=$i
                                k=i;
                        }
                        if (i>k){
                                ERRO2=ERRO2" "$i
                        }
                }
                print $1"-"$2"|"$3"|"FROM"|"TO"|"$6" "ERRO"|"ERRO2
        }' $LOG > $TMPDIR/reject0.tmp
}

function reject_bounced(){
        awk '/status=bounced/ {
                ERRO=""
                for (i=8;i<=NF;i++){
                        ERRO=ERRO" "$i
                }
                print $1"-"$2"|"$3"| |"$7"|"$6"|"ERRO
        }' $LOG > $TMPDIR/reject-id.tmp
        while IFS=\| read data hora from to id erro
        do
                from="$(grep $id $LOG |grep "from=<" |awk {'print $7'}
|uniq)"
                echo "$data|$hora|$from|$to|$erro |sed 's/,$//g'" >>
$TMPDIR/reject0.tmp
        done < $TMPDIR/reject-id.tmp
        rm -rf $TMPDIR/reject-id.tmp
}

function reject_amavis(){
        awk '/Blocked / {
                ERRO=""
                for (i=7;i<=NF;i++){
                        if (match($i,/->/)){
                                FROM=$(i-1)
                                TO=$(i+1)
                                ERRO=$(i+2)" "$(i+3)
                         }
                }
                print $1"-"$2"|"$3"|"FROM"|"TO"|"$7" "$8" "$9" "ERRO
        }' $LOG >> $TMPDIR/reject0.tmp
}

function import_reject(){
        mysql -u$dbuser -p$dbsenha -e "load data infile
'$TMPDIR/reject.tmp' into table reject fields terminated by '|'" $database
        rm -rf $TMPDIR/reject.tmp
}

function arruma_data_reject(){
        sed
's/^Jan/'$YN'-01/;s/^Feb/'$YN'-02/;s/^Mar/'$YN'-03/;s/^Apr/'$YN'-04/;s/May/'$YN'-05/;s/Jun/'$YN'-06/;s/Jul/'$YN'-07/;s/Aug/'$YN'-08/;s/Sep/'$YN'-09/;s/Oct/'$YN'-10/;s/Nov/'$YN'-11/;s/Dec/'$YN'-12/;s/\(from=\|to=\|<\|>\)//gi'
< $TMPDIR/reject0.tmp > $TMPDIR/reject.tmp
        rm -rf $TMPDIR/reject0.tmp
}


function finaliza(){
        printf "Limpando variaveis..."
        unset dbuser dbsenha database PID  registro tam dest tamanho
destinatarios assunto TMPDIR
        printf " ok \n"
        printf "Finalizado, dados importados com sucesso. $(date
"+%D-%T").\n\n"
}

case "$1" in
                validos)
                        echo "Gerando relatorio de e-mails validos..."
                        validos
                        # import_mails
                        finaliza
                        ;;
                invalidos)
                        printf "Gerando relatorio de e-mails invalidos..."
                        invalidos
                        # import_reject
                        finaliza
                        printf "ok \n"
                        ;;
                *)
                        echo "Gerando relatorio completo (validos e
invalidos)"
                        validos
                        # import_mails
                        invalidos
                        # import_reject
                        finaliza
                        ;;
esac



2013/10/25 Aguimar Rezende Junior <arezendejunior em gmail.com>

> Boa noite pessoal
>
> Alguém tem um cópia do antigo script post-la ?
>
>
> Aguimar Rezende
> ______________________________**_________________
> Postfix-br mailing list
> Postfix-br em listas.**softwarelivre.org<Postfix-br em listas.softwarelivre.org>
> http://listas.softwarelivre.**org/cgi-bin/mailman/listinfo/**postfix-br<http://listas.softwarelivre.org/cgi-bin/mailman/listinfo/postfix-br>
>



-- 
Mateus Schott
Administrador de Redes
LPI 1 - Junior Level Linux Certification
Novell Certified Linux Administrator


*“A caixa dizia: Requer MS Windows ou superior. Então instalei Linux.”*
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.softwarelivre.org/pipermail/postfix-br/attachments/20131029/4b3b0958/attachment.html>


More information about the Postfix-br mailing list