From 350939e8197e19eaa8f82adfa75919759d502883 Mon Sep 17 00:00:00 2001 From: Peter Baumann Date: Tue, 4 Jun 2013 15:54:38 +0200 Subject: [PATCH] added mailreport --- mail/mailreport.sh | 97 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100755 mail/mailreport.sh diff --git a/mail/mailreport.sh b/mail/mailreport.sh new file mode 100755 index 0000000..3e9bcea --- /dev/null +++ b/mail/mailreport.sh @@ -0,0 +1,97 @@ +#!/bin/sh - +set -a +MAILTO=postmaster@commcare.ch +LOGS='/var/log/maillog*' +SECMAX=999 +############################################################################# +# spamrep_today marquis@roble.com # +# $Id: spamrep_postfix_today,v 1.16 2001/10/25 16:16:30 marquis Exp marquis $ +# Usage A: spamrep_today # +# (prints report to screen) # +# Usage B: spamrep_today mail # +# (mails report to $MAILTO, recommended for crontabs) # +############################################################################# +# Solaris needs /usr/ucb/mail for the -s flag +PATH=/usr/ucb:/bin:/usr/bin:/usr/sbin:/sbin +umask 077 +#-------------------------------------------------------------------- +if [ "$1" != "" ] && [ "$1" != mail ]; then + echo "USAGE: `basename $0` [mail]" + exit 1 +fi +#------------------[ summary header ]-------------------------------- +host="`/bin/hostname`.`/bin/dnsdomainname`" +LOGDATE="`date|cut -c5-10|sed 's/ /./g'`" +DAY="`date|awk '{print $1, $2, $3, $NF}'`" +TMP="/tmp/stats.$$" +trap "rm -f $TMP.spam $TMP.sum $TMP ; exit 1" 0 1 2 3 15 +rm -f $TMP.spam $TMP.sum $TMP +echo "" >> $TMP.sum +echo "------- $host mailstats for $DAY -------" >> $TMP.sum +echo "" >> $TMP.sum +#-------------------------------------------------------------------- +grep -ih "blocked.using" $LOGS | grep "$LOGDATE" > $TMP.spam +if [ -s $TMP.spam ]; then + SS="`wc -l $TMP.spam | awk '{print $1}'`" + echo "" >> $TMP + echo "------- $SS filtered by subscription -------" >> $TMP + echo " $SS filtered by subscription" >> $TMP.sum + echo "" >> $TMP + tail -${SECMAX} $TMP.spam >> $TMP + rm -f $TMP.spam +fi +#-------------------------------------------------------------------- +grep -ih "access.denied" $LOGS | grep "$LOGDATE" | \ + egrep -iv '(domain.not.found|service.unavailable|need.fully-qualified|sender.source.domain.mismatch)' > $TMP.spam +if [ -s $TMP.spam ]; then + SS="`wc -l $TMP.spam | awk '{print $1}'`" + echo "" >> $TMP + echo "------- $SS filtered by localhost -------" >> $TMP + echo " $SS filtered by localhost" >> $TMP.sum + echo "" >> $TMP + tail -${SECMAX} $TMP.spam >> $TMP + rm -f $TMP.spam +fi +#-------------------------------------------------------------------- +egrep -ih "sender.source.domain.mismatch" $LOGS | grep "$LOGDATE" | \ + egrep -iv '(domain.not.found|service.unavailable|need.fully-qualified|access.denied|blocked.using)' > $TMP.spam +if [ -s $TMP.spam ]; then + ## per http://www.monkeys.com/anti-spam/filtering/additions.html +SS="`wc -l $TMP.spam | awk '{print $1}'`" + echo "" >> $TMP + echo "------- $SS dropped due to sender/source mismatch -------" >> $TMP + echo " $SS dropped due to sender/source mismatch" >> $TMP.sum + echo "" >> $TMP + tail -${SECMAX} $TMP.spam >> $TMP + rm -f $TMP.spam +fi +#-------------------------------------------------------------------- +egrep -ih '(domain.not.found|service.unavailable|need.fully-qualified)' $LOGS | \ + grep "$LOGDATE" | egrep -iv '(access.denied|blocked.using|sender.source.domain.mismatch)' > $TMP.spam +if [ -s $TMP.spam ]; then + SS="`wc -l $TMP.spam | awk '{print $1}'`" + echo "" >> $TMP + echo "------- $SS dropped for SMTP or DNS protocol reasons -------" >> $TMP + echo " $SS dropped for SMTP or DNS protocol reasons" >> $TMP.sum + echo "" >> $TMP + tail -${SECMAX} $TMP.spam >> $TMP + rm -f $TMP.spam +fi +#------------------[ finish header and view or mail ]---------------- +echo "" >> $TMP +if [ '`grep -v ^$ "$TMP" 2>/dev/null`' = '' ]; then + rm -f $TMP $TMP.spam $TMP.sum + echo "ERROR: No data for $LOGDATE found in $LOGS ..." + exit 1 +else + echo " (statistics may not be 100% accurate)" >> $TMP.sum + cat $TMP >> $TMP.sum + rm -f $TMP $TMP.spam +fi +if [ "$1" = "mail" ]; then + # ucb mail understands -s + mail -s "$host mailstats for $DAY" $MAILTO < $TMP.sum +else + more $TMP.sum +fi +rm -f $TMP $TMP.spam $TMP.sum