Mail

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

 ---------------------------------