[Postfix-br] Post-la
Gabriel Francisco
frc.gabriel em gmail.com
Terça Outubro 29 10:50:16 BRST 2013
Bom dia Aguimar,
provavelmente pelo email estar em HTML pode ter causado a separação
dos caracteres <<.
Cordialmente.
Gabriel Francisco
----------------------------
Linux User #507840
phone: (041) 9195-5010
email: frc.gabriel[at]gmail.com
On Tue, Oct 29, 2013 at 10:37 AM, Aguimar Rezende Junior
<arezendejunior em gmail.com> wrote:
> Oi Mateus na verdade seria este mais antigo:
>
> Mas não consegui descobrir este erro:
>
> ./post-la.sh: line 59: syntax error near unexpected token `<'
> ./post-la.sh: line 59: ` done < < '($egrep (delivered to mail|Ok:
> queued as)' $dirlog/$nomelog |$awk {'print $6'} |$uniq)'
>
>
>
> #!/bin/sh
>
> #######################################
> # v1.1.2
> # Desenvolvido por Henrique Bueno
> # henriquebueno em gmail.com
> # http://hbueno.eti.br
> # http://post-la.kibibit.com.br
> #
> # Este programa esta licenciado sob
> # uma licenca creative Commons
> #
> #######################################
>
>
> function main(){
> whereis=/usr/bin/whereis
> cut=/usr/bin/cut
> grep=$($whereis -b grep |$cut -d " " -f2)
> tr=$($whereis -b tr |$cut -d " " -f2)
> egrep=$($whereis -b egrep |$cut -d " " -f2)
> cat=$($whereis -b cat |$cut -d " " -f2)
> ls=$($whereis -b ls |$cut -d " " -f2)
> bc=$($whereis -b bc |$cut -d " " -f2)
> sort=$($whereis -b sort |$cut -d " " -f2)
> uniq=$($whereis -b uniq |$cut -d " " -f2)
> awk=$($whereis -b awk |$cut -d " " -f2)
> sed=$($whereis -b sed |$cut -d " " -f2)
>
> # Alterar esta variavel caso tenha instalado em um diretorio
> # diferente de /etc/post-la (sem "/" no final)
> dirinst="/etc/post-la"
>
> # Pega as variaveis do arquivo de configuracao
> dir=$($grep DIRPOST $dirinst/post-la.conf |$cut -c 9-)
> dirlog=$($grep DIRLOG $dirinst/post-la.conf |$cut -c 8-)
> nomelog=$($grep NOMELOG $dirinst/post-la.conf |$cut -c 9-)
> TAG=$($grep TAG $dirinst/post-la.conf |$cut -c 5-)
>
> dataarq="$(echo $(date +%Y))-$(echo $(date +%m))-$(echo $(date
> +%d)).log"
> if test -f "$dir/dados/$dataarq"; then rm $dir/dados/$dataarq; fi
> touch $dir/dados/$dataarq
> if test -f "$dir/resumo/$dataarq"; then rm $dir/resumo/$dataarq; fi
> touch $dir/resumo/$dataarq
>
> while read LINHA
> do
> PegaCampos
> if test $PULA="NAO"
> then
> if test -n "$(echo $FROM |$cut -c 4-)" || test -n
> "$(echo $TO |$cut -c 4-)"
> then
> PegaTamanho
> LimparString
> ArrumaData
> echo "$DATA|$HORA|$ASSUNTO|$FROM|$TO|$TAM"
>>> "$dir/dados/$dataarq"
> fi
> fi
> done < < '($egrep (delivered to mail|Ok: queued as)'
> $dirlog/$nomelog |$awk {'print $6'} |$uniq)
> Resumo
> }
>
> function PegaCampos(){
> PULA="NAO"
> ID=$(echo $LINHA |$sed 's/://')
> EMAIL=$($grep $ID $dirlog/$nomelog |$grep $TAG |$tr -d '%')
> if test -z "$EMAIL"
> then
> IDR="$($grep $ID $dirlog/$nomelog |$grep -i Requeue |$awk
> {'print $7'} |$cut -d. -f1)"
> if test -z "$IDR"
> then
> PULA=SIM
> else
> EMAIL=$($grep $IDR $dirlog/$nomelog |grep $TAG)
> echo "PAM=$LINHA/$EMAIL" >> $dir/erro.log
> fi
> fi
> DATA="$(echo $(date +%Y) $(echo $EMAIL |$awk {'print $1" "$2'}))"
> HORA="HR=$(echo $EMAIL |$awk {'print $3'})"
> FROM="DE=$(echo $EMAIL |$sed 's/from=</|/' |$sed 's/to=</|/' |$cut
> -d\| -f2 |$sed 's/>//' |$tr -d '%')"
> TO="PR=$(echo $EMAIL |$sed 's/from=</|/' |$sed 's/to=</|/' |$cut
> -d\| -f3 |$cut -d\> -f1 |$sed 's/>//' |$tr -d '%')"
> TAM="$($grep "$ID" $dirlog/$nomelog |$grep size |$awk {'print $8'}
> |$cut -c 6- |$sed 's/,//' |$uniq)"
> ASSUNTO=$(echo $EMAIL |$sed 's/Subject:/|/' |$sed 's/from /|/' |$cut
> -d\| -f2 | $cut -c 0-150 |$tr -d '%')
> }
>
> function PegaTamanho(){
> if (( "$TAM" >= 1000000 ))
> then
> TAM="TM=$(echo "scale=2; $TAM/1000000" |$bc) mb"
> else
> TAM="TM=$(echo "scale=2; $TAM/1000" |$bc) kb"
> fi
> }
>
> function ArrumaData(){
> mes=$(echo $DATA |$awk {'print $2'})
> case "$mes" in
> Jan) mes=01;;
> Feb) mes=02;;
> Mar) mes=03;;
> Apr) mes=04;;
> May) mes=05;;
> Jun) mes=06;;
> Jul) mes=07;;
> Aug) mes=08;;
> Sep) mes=09;;
> Oct) mes=10;;
> Nov) mes=11;;
> Dec) mes=12;;
> esac
> dia=$(echo $DATA |$awk {'print $3'})
> ano=$(echo $DATA |$awk {'print $1'})
> DATA="DT=$dia"/"$mes"/"$ano"
> }
>
> function LimparString(){
> ASSUNTO="$(echo $ASSUNTO |$tr [:upper:] [:lower:] |$tr -d '%')"
> carac[1]="=c3=a3;a"
> carac[2]="=c3=b5;o"
> carac[3]="=\?iso-8859-1\?q\?;"
> carac[4]="=e1;a"
> carac[5]="=e7;c"
> carac[6]="=e3;a"
> carac[7]="=f5;o"
> carac[8]="=c7=c3;ca"
> carac[10]="=c3=a7;c"
> carac[11]="=e9;e"
> carac[12]="=c3;a"
> carac[13]="\?windows-1252\?q\?;"
> carac[14]="=d4;o"
> carac[15]="=c7;a"
> carac[16]="=5b;"
> carac[17]="=5d;"
> carac[18]="=f3;o"
> carac[19]="=f4;o"
> carac[20]="\?;"
> carac[21]="=;"
> carac[22]="_; "
>
> for teste in "${carac[@]}"
> do
> ASSUNTO="${ASSUNTO//$(echo $teste |$cut -d\; -f1)/$(echo
> $teste |$cut -d\; -f2)}"
> done
> if test -z "$ASSUNTO"
> then
> ASSUNTO="(sem assunto)"
> fi
> ASSUNTO="AS=$ASSUNTO"
> }
>
> function Resumo(){
> # pega contas que enviaram e-mails
> while read dom
> do
> $cat "$dir/dados/$dataarq" |$cut -d\| -f4 |$cut -c 4- |$cut
> -d: -f1 |$grep @$dom |$sort |$uniq >> $dir/contas.tmp
> done < <($cat $dirinst/dominios)
>
> # compara com contas que receberam e-mails
> while read dom
> do
> while read LINHA
> do
> if test -z "$($grep $LINHA $dir/contas.tmp)"; then
> echo "$LINHA" >> $dir/contas.tmp;fi
> done < <($cat "$dir/dados/$dataarq" |$cut -d\| -f5 |$cut -c
> 4- |$cut -d: -f1 |$grep @$dom |$sort |$uniq)
> done < <($cat $dirinst/dominios)
>
> while read LINHA
> do
> EMAIL="$LINHA"
> ENVIADOS=$($grep "DE=$EMAIL" $dir/dados/$dataarq | wc -l)
> RECEBIDOS=$($grep "PR=$EMAIL" $dir/dados/$dataarq | wc -l)
> tamenv=0
> tamrec=0
>
> # pega tamanho de emails enviado
> while read tamanho
> do
> PegaTamanhoResumo
> tamenv=$(echo "scale=2; $tamenv+$TAM" |$bc)
> done < <($grep DE=$EMAIL $dir/dados/$dataarq |$cut -d\| -f6)
> #if test "$(echo $tamenv |$cut -d. -f1)" -ge 1000
> #then
> # tamenv="$(echo "scale=2; $tamenv/1000" |$bc) mb"
> #else
> #tamenv="$tamenv"
> # tamenv="$tamenv kb"
> #fi
>
> # pega tamanho de e-mails recebidos
> while read tamanho
> do
> PegaTamanhoResumo
> tamrec=$(echo "scale=2; $tamrec+$TAM" |$bc)
> done < <($grep PR=$EMAIL $dir/dados/$dataarq |$cut -d\| -f6)
>
> #if test "$(echo $tamrec |$cut -d. -f1)" -ge 1000
> #then
> # tamrec="$(echo "scale=2; $tamrec/1000" |$bc) mb"
> #else
> #tamrec="$tamrec"
> # tamrec="$tamrec kb"
> #fi
> echo "$EMAIL|$ENVIADOS|$tamenv|$RECEBIDOS|$tamrec" >>
> "$dir/resumo/$dataarq"
> done < <($cat $dir/contas.tmp |$sort |$uniq)
> rm $dir/contas.tmp
> }
>
> function PegaTamanhoResumo(){
> var="$(echo $tamanho |$awk {'print $2'})"
> valor="$(echo $tamanho |$awk {'print $1'} |$cut -c 4-)"
> if test "$var" = mb
> then
> TAM=$(echo "scale=2; $valor*1000" |$bc)
> else
> TAM=$valor
> fi
> }
>
> main
>
>
>
> ######################################
>
>
>
>
>
> Em 29/10/2013 09:13, mateus schott escreveu:
>
> 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
>> 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.”
>
>
> _______________________________________________
> Postfix-br mailing list
> Postfix-br em listas.softwarelivre.org
> http://listas.softwarelivre.org/cgi-bin/mailman/listinfo/postfix-br
>
>
>
> _______________________________________________
> Postfix-br mailing list
> Postfix-br em listas.softwarelivre.org
> http://listas.softwarelivre.org/cgi-bin/mailman/listinfo/postfix-br
>
More information about the Postfix-br
mailing list