Advertisement
radeschi

Relatório de emails do postfix

Aug 22nd, 2012
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 4.12 KB | None | 0 0
  1. #!/bin/bash
  2. #
  3. # Relatório de emails enviados do postfix.
  4. #
  5. # Gera relatório de quantos emails o usuário enviou
  6. # e para quem foram enviados, além de contar individualmente
  7. # quantos emails foram enviados por remetente.
  8. #
  9. # Maicon Radeschi - 17/08/2012
  10. # radeschi@gmail.com
  11. #
  12.  
  13. #Gerar log simplicado com maillogconvert
  14. AWSTATS="/var/www/maicon/maillogconvert.pl"
  15. LOG_FULL="/var/www/maicon/mail.log.zimbra"
  16. LOG="/var/www/maicon/mail.log.converted"
  17. F_FROM=$(mktemp)
  18. F_TO=$(mktemp)
  19. DIR_REPORT="/var/www/maicon/report/report"
  20. INDEX_HTML="/var/www/maicon/report/report.html"
  21. TMP_NUM_FILES=$(mktemp)
  22. TMP_USERS_TO_GO=$(mktemp)
  23. DOMAIN="@tjmt.jus.br"
  24.  
  25. #Conta quantos emails foram enviados para cada destinatario
  26. function COUNT_LINES(){
  27.     awk '{
  28.     for (w = 1; w <= NF; w++) conta[$w] ++
  29. }
  30. END {
  31.     for (w in conta) print conta[w], w | "sort -nr"
  32. }' $1
  33. }
  34.  
  35. function START() {
  36. echo -en "> Convertendo LOG para formato AWSTATS... \t\t"
  37. $AWSTATS standard $LOG_FULL > $LOG 2>/dev/null
  38. echo "|OK|"
  39. #FROM
  40. echo -en "> Criando lista de usuarios... \t\t\t"
  41. egrep -v "<>|bounce-" $LOG | cut -d' ' -f3 > $F_FROM
  42. TOTAL_FROM=$(wc -l $F_FROM | cut -d' ' -f1)
  43. echo "|OK|"
  44. #TO
  45. echo -en "> Criando lista de destinatarios... \t\t"
  46. egrep -v "<>|bounce-" $LOG | cut -d' ' -f4 > $F_TO
  47. TOTAL_TO=$(wc -l $F_TO | cut -d' ' -f1)
  48. echo "|$TOTAL_TO Encontrados|"
  49.  
  50. COUNTER=1
  51. cat $LOG | egrep -v "<>|bounce-" | awk -F" " '{print $3, $4 }' | while read email;
  52.     do
  53.     FROM_A=`echo $email | cut -d' ' -f1`;
  54.     TO_A=`echo $email | cut -d' ' -f2`;
  55.     let COUNTER++;
  56.         echo -en "Gerando arquivo de email => $FROM_A => $TO_A - $COUNTER de $TOTAL_FROM\n" ;
  57.     echo "$TO_A" >> $DIR_REPORT/$FROM_A.tmp ;
  58.     done
  59. COUNT_FILES
  60. }
  61.  
  62. #Conta quantos arquivos individuais de usuario do domínio
  63. #existem dentro do diretorio
  64. function COUNT_FILES() {
  65. TMP_REMOVE_DIR=$(echo $DIR_REPORT | sed 's/\///g')
  66. for FILES in $DIR_REPORT/*
  67.     do
  68.         echo "$FILES" >> $TMP_NUM_FILES
  69. done
  70. grep "$DOMAIN" $TMP_NUM_FILES | sed 's/\///g' | sed "s/^$TMP_REMOVE_DIR//g" > $TMP_USERS_TO_GO
  71. TMP_TOTAL_USERS_TO_GO=$(cat $TMP_USERS_TO_GO | wc -l)
  72. MAKE_INDEX
  73. }
  74.  
  75. #Cria uma pagina HTML com o nome de todos usuarios que enviaram email
  76. function MAKE_INDEX() {
  77. DATA=$(awk -v linha=1 -F "\n" 'NR<=linha{ print }END{ print }' $LOG | cut -d' ' -f1)
  78. echo "<FONT FACE=ARIAL SIZE=4>Relatório dos dias entre: $DATA</FONT><BR>" > $INDEX_HTML
  79. echo "<FONT FACE=ARIAL SIZE=4>Total de usuarios: $TMP_TOTAL_USERS_TO_GO</FONT>" >> $INDEX_HTML
  80. echo "<BR>" >> $INDEX_HTML
  81. echo "<TABLE>" >> $INDEX_HTML
  82. COUNTER=1
  83. while [ $COUNTER -le $TMP_TOTAL_USERS_TO_GO ];
  84.     do
  85.         USER_A=$(sed -n $COUNTER' p;' $TMP_USERS_TO_GO | sed 's/.tmp//g')
  86.         echo "Adicionando usuario $USER_A a index.html - $COUNTER de $TMP_TOTAL_USERS_TO_GO"
  87.         echo "<TR>" >> $INDEX_HTML
  88.         echo "<TD><A HREF=user.php?user=$USER_A><FONT FACE=ARIAL SIZE=3>$USER_A</FONT></A></TD>" >> $INDEX_HTML
  89.         echo "</TR>" >> $INDEX_HTML
  90.         COUNTER=$(($COUNTER+1))
  91. done
  92. echo "</TABLE>" >> $INDEX_HTML
  93. MAKE_PAGE_USER
  94. }
  95.  
  96. #Cria uma pagina para cada usuario que enviou email, contendo o endereco de
  97. #email dos destinatarios
  98. function MAKE_PAGE_USER() {
  99. COUNTER=1
  100. while [ $COUNTER -le $TMP_TOTAL_USERS_TO_GO ];
  101.     do
  102.         USER_A=$(sed -n $COUNTER' p;' $TMP_USERS_TO_GO)
  103.         USER_DEST=$(sed -n $COUNTER' p;' $TMP_USERS_TO_GO | sed 's/.tmp//g')
  104.         echo "Gerando pagina individual dos usuarios: $COUNTER de $TMP_TOTAL_USERS_TO_GO"
  105.         COUNT_LINES $DIR_REPORT/$USER_A > $DIR_REPORT/$USER_DEST
  106.         rm -rf $DIR_REPORT/$USER_A
  107.         COUNTER=$(($COUNTER+1))
  108. done
  109. echo ""
  110. echo "Relatorio gerado com sucesso!"
  111. }
  112.  
  113. #Compara se o arquivo contendo os remetentes tem o
  114. #mesmo numero de linhas do arquivo com os destinatarios
  115. function COMP_FILES() {
  116. if [ "$TOTAL_FROM" = "$TOTAL_TO" ];
  117.     then
  118.         START
  119.     else
  120.         echo "Alguma coisa esta errada!"
  121. fi
  122. }
  123.  
  124. #Verifica se o awstats esta instalado
  125. function CHECK_AWSTATS() {
  126.     if [ -e $AWSTATS ];
  127.         then
  128.             COMP_FILES
  129.         else
  130.             echo "AWStats não instalado, impossível continuar."
  131.     fi
  132. }
  133.  
  134. CHECK_AWSTATS
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement