We are going the see the top five(5) senders and receivers of email by volume and size
/usr/local/pflogsumm/pflogsumm.pl -u 5 -h 5 --problems_first \ -d today /var/log/maillog
/usr/local/pflogsumm/pflogsumm.pl -u 5 -h 5 -d today /var/log/maillog
perl /usr/sbin/pflogsumm -u 5 -h 5 --problems_first \ -d today /var/log/maillog
perl /usr/sbin/pflogsumm -u 5 -h 5 -d today /var/log/maillog
Mail Q details [ Running Q mail ]
mailq|grep ^[A-F0-9]|cut -c 42-80|sort |uniq -c|sort -n|tail
# find /var/spool/postfix/deferred -type f | wc -l
Backup
[root@mail bin]# vi backup_and_mail.sh
#!/bin/sh
NOW=$(date +"%d-%m-%Y")
cat /etc/shadow > /etc/postfix/shadow
tar -zcvf /backup/postfix_backup_$NOW.tar.gz /etc/postfix/
mutt -s "Postfix backup" -a /backup/postfix_backup_$NOW.tar.gz sysadmin@gmail.com admin@yahoo.com < /root/bin/body.txt
Disk Check
[root@mail bin]# vi diskcheck.sh
#!/bin/bash
CURRENT=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')
THRESHOLD=90
if [ "$CURRENT" -gt "$THRESHOLD" ] ; then
mail -s 'Hard Disk Space Alert on $HOSTNAME' sysadmin@gmail.com admin@yahoo.com << EOF
Your root partition remaining free space is critically low. Used: $CURRENT%
EOF
fi
MailQ
[root@mail bin]# vi mail_usage.sh
#!/bin/bash
NOW=$(date +"%b %e")
echo $NOW
/bin/grep "$NOW" /var/log/maillog > /root/maillog
sleep 1
/usr/local/bin/pflogsumm -d today --smtpd_warning_detail=0 --reject_detail=0 --deferral_detail=0 --rej_add_from --problems_first /root/maillog > /root/mailreport.txt
sleep 3
echo "Local MAIL Usage LOG" >> /root/mailreport.txt
echo "====================" >> /root/mailreport.txt
cat /var/log/messages | grep "DPT=25 " | cut -d' ' -f9 | grep "192.168"| sort | uniq -c| sort >> /root/mailreport.txt
sleep 1
echo "HD Space Information " >> /root/mailreport.txt
echo "===================================" >> /root/mailreport.txt
df -h >> /root/mailreport.txt
sleep 1
/bin/mail -s "Log report of $HOSTNAME" sysadmin@gmail.com admin@yahoo.com < /root/mailreport.txt
# reset of script
POSTFIX QUEUE MONITORING SCRIPT
[root@s1 tmp]# touch queueStatus.sh
chmod +x queueStatus.sh
# vi touch queueStatus.sh
--------------------------
#!/usr/bin/env perl
# postfix queue/s size
# author:
# source: http://tech.groups.yahoo.com/group/postfix-users/message/255133
use strict;
use warnings;
use Symbol;
sub count {
my ($dir) = @_;
my $dh = gensym();
my $c = 0;
opendir($dh, $dir) or die "$0: opendir: $dir: $!\n";
while (my $f = readdir($dh)) {
if ($f =~ m{^[A-F0-9]{5,}$}) {
++$c;
} elsif ($f =~ m{^[A-F0-9]$}) {
$c += count("$dir/$f");
}
}
closedir($dh) or die "closedir: $dir: $!\n";
return $c;
}
my $qdir = `postconf -h queue_directory`;
chomp($qdir);
chdir($qdir) or die "$0: chdir: $qdir: $!\n";
printf "Incoming: %d\n", count("incoming");
printf "Active: %d\n", count("active");
printf "Deferred: %d\n", count("deferred");
printf "Bounced: %d\n", count("bounce");
printf "Hold: %d\n", count("hold");
printf "Corrupt: %d\n", count("corrupt");
--------------------------------
[root@s1 tmp]# ./queueStatus.sh
Incoming: 0
Active: 0
Deferred: 8
Bounced: 6
Hold: 0
Corrupt: 0
---------------------------------
-----------------------------------------------------------
Remove a user 's mail from queue
---------------------------------------------------------------
remove_mail_in_queue.sh
#!/bin/bash _USER="USER@YouWantDelete" for i in `postqueue -p | grep $_USER | awk {'print $1'} | grep -v 'MAILER-DAEMON'` do # remove "*" mymail=`echo $i | tr -d '*' ` if [[ "$mymail" != "" ]] then postsuper -d $mymail fi done
Cleanup old mail (over 90 days)
#!/bin/bash # V0.6 # clean FOLDER on $1 # build a list.sh to run echo "# clear 90 day before file" MYDIR=`pwd` function cleardir { FOLDER="$1" if [ -d "$FOLDER" ]; then echo "#######################################" echo "# pwd: $MYDIR" echo "# FOLDER: $FOLDER" if [ -e "${FOLDER}/cur" ]; then bakdir="${MYDIR}/backup/${FOLDER}.cur.old" src="${FOLDER}/cur" else bakdir="${MYDIR}/backup/${FOLDER}.old" src="${FOLDER}" fi echo "# src: $src" echo "# bakdir: $bakdir" echo "mkdir -p \"$bakdir\"" find "$src" -mtime +90 -type f -exec echo 'mv -b ' \''{}'\' \'"$bakdir"\' \; fi } # folder list ls -1 -A > myfilelist.txt while read line do if [ "$line" != "courierimaphieracl" ] && [ "$line" != "courierimapkeywords" ]; then echo "$line" cleardir "$line" >> list.sh fi done < "myfilelist.txt" rm -f myfilelist.txt chmod 700 list.sh echo "Done"
telnet smtp test script
#!/bin/sh _SERVER="xxx.xxx.xxx.xxx" ( echo "HELO testing.com" sleep 2 echo "MAIL FROM:<tim@MyReturnDomain>" sleep 2 echo "RCPT TO:<tester@TestDomain>" sleep 2 echo DATA sleep 2 echo "Subject:Test-Mail!" sleep 2 echo "Test-Mail!" sleep 2 echo . sleep 2 echo QUIT ) | telnet $_SERVER 25
P.S.
telnet 後沒有待對方 reply 說 helo 及每句只等 2 秒好易出事, 所以這段 script 唔多 work ...
mailreport.sh
cron jobs
30 23 * * * /root/script/mailreport.sh &> /dev/null
官網 package: pflogsumm-1.1.3.tar.gz
script:
#!/bin/bash pflogsumm="/usr/sbin/pflogsumm.pl" mail="/usr/bin/mail" maillog="/var/log/mail.log" report="/root/mail_report.txt" recipient="x@y" content="/root/script/mail_report_content.txt" echo "gen report" $pflogsumm -d today -u 10 -h 10 \ --no_bounce_detail --no_deferral_detail \ --no_reject_detail --no_smtpd_warnings \ $maillog > $report 2>/dev/null echo "send report" echo "" | mail -s"Daily e-mail report" -a"$report" -q "$content" -r "$recipient" $recipient
Cleanup dummy mail data
cleanup_dummy_mail_data.sh
#!/bin/bash # filename: cleanup_mail_data.sh ###################################### Setting _DOMAIN="datahunter.org" _SQLPW="???????????" _MailData="/var/vmail/vmail" ###################################### Code _MailBoxPath=$_MailData/$_DOMAIN _USERLIST=/tmp/userlist.$$.txt _MailBoxList=/tmp/mailbox.$$.txt # cleanup screen clear if [ ! -d $_MailBoxPath ];then echo "no mail data" exit 1 fi echo "working on: $_MailBoxPath" # create folder for backup mkdir $_MailBoxPath/_backup 2> /dev/null if [ ! -d $_MailBoxPath/_backup ];then echo "no backup folder" exit 1 fi # fetch working user mysql -uvmail vmail -p$_SQLPW \ -e "SELECT SUBSTRING_INDEX(username, \"@\", 1) FROM mailbox WHERE domain=\"$_DOMAIN\"" > $_USERLIST # mailbox list ls -1 $_MailBoxPath > $_MailBoxList # except list in MailBoxList sed -i "/_backup/d" $_MailBoxList # go MailBoxPath cd $_MailBoxPath # loop it echo "========== cleanup box ==========" while read box do grep $box $_USERLIST > /dev/null if [[ $? -eq 1 ]] then echo "mv $box _backup" fi done < $_MailBoxList echo "============= END ===============" # Cleanup rm $_MailBoxList $_USERLIST
---------------------------------