When a subscribers mail box fills up or they exceed their quota the mail starts to pile up in the /var/spool/mqueue directory. A search of the Internet found several scripts that will clean it up but most use qtool.pl which I haven’t been able to find. Typical is http://www.brandonhutchinson.com/deleting_mail_queue.html . I did find a ksh script SQG – Sendmail Queue Groomer at http://www.sun.com/bigadmin/scripts/submittedScripts/queue_groomer.ksh.txt that was a starting point for the following.
Note: Jan, 2010 – make sure that the /var/spool/morgue-queue directory exists before running the script or the files will get moved to a file of that name instead of being moved into that directory.
#!/bin/bash
#-----------------------------------------------------------------------#
# SQG - Sendmail Queue Groomer
#
# David G. Sullivan
# dsullivan@grapevinesolutions.com
# 12/28/2003
#
# Modified for Redhat - Linux / bash
#
# Alan Madill
# amadill@hwy16.com
# 08/11/2009
#
# Description:
# A very simple script to keep normal sendmail queues clear of
# undeliverable email. Undeliverable email is moved to a separate
# queue (morgue-queue) for processing from cron. Mail in the
# morgue-queue is removed after X attempts at delivery.
#
#
# Add the below command in cron to run every 30 minutes to process mail
# in the morgue directory with a separate queue runner.
#
# /usr/lib/sendmail -q -O QueueDirectory=/var/spool/morgue-queue
#-----------------------------------------------------------------------#
#-----------------------------------------------------------------------#
# Operating parameters
#-----------------------------------------------------------------------#
declare -i queue_max=10 # Max delivery attempts for normal mail before
# moving mail to morgue directory.
declare -i morgue_max=15 # Max delivery attempts for morgue mail before
# deleting mail message.
#-----------------------------------------------------------------------#
# Command locations
#-----------------------------------------------------------------------#
SENDMAIL=/usr/lib/sendmail
DATE=/bin/date
GREP=/bin/grep
CUT=/bin/cut
MV=/bin/mv
RM=/bin/rm
LS=/bin/ls
#-----------------------------------------------------------------------#
# Directory locations
#-----------------------------------------------------------------------#
Mail_Queues=/var/spool/mqueue
Mail_Morgue=/var/spool/morgue-queue
#-----------------------------------------------------------------------#
# Log file for morgue transactions (Mail delivery is still in syslog)
#-----------------------------------------------------------------------#
logfile=/var/log/morgue.log
#-----------------------------------------------------------------------#
# Stop sendmail
#-----------------------------------------------------------------------#
/sbin/service sendmail stop
/bin/sleep 5
#-----------------------------------------------------------------------#
# Check Mail Queues
#-----------------------------------------------------------------------#
for y in $($LS $Mail_Queues|$GREP ^qf*)
do
#echo "file" $y
declare -i delv_attempts=$($GREP ^N $Mail_Queues/$y|$CUT -c 2-5)
msgid=$(echo $y|$CUT -c 3-35)
date=$($DATE)
To=$($GREP ^rRFC822 $Mail_Queues/$y|awk '{print $2}')
if (test $delv_attempts -ge $queue_max) then
echo $date", MSGID: "$msgid" Moved, "$To >> $logfile
#echo $MV $Mail_Queues"/qf"$msgid" "$Mail_Morgue
$MV $Mail_Queues/qf$msgid $Mail_Morgue
#echo $MV $Mail_Queues"/df"$msgid" "$Mail_Morgue
$MV $Mail_Queues/df$msgid $Mail_Morgue
fi
done
#-----------------------------------------------------------------------#
# Check Morgue Mail Queue
#-----------------------------------------------------------------------#
for y in $($LS $Mail_Morgue|$GREP ^qf*)
do
declare -i delv_attempts=$($GREP ^N $Mail_Morgue/$y|$CUT -c 2-5)
msgid=$(echo $y|$CUT -c 3-35)
date=$($DATE)
To=$($GREP ^rRFC822 $Mail_Morgue/$y|awk '{print $2}')
if (test $delv_attempts -ge $morgue_max) then
echo $date", MSGID: "$msgid" Removed, "$To >> $logfile
#echo $RM $Mail_Morgue"/qf"$msgid
$RM $Mail_Morgue/qf$msgid
#echo $RM $Mail_Morgue"/df"$msgid
$RM $Mail_Morgue/df$msgid
fi
done
#-----------------------------------------------------------------------#
# Start sendmail
#-----------------------------------------------------------------------#
/sbin/service sendmail start
##############################################################################
### This script is submitted to BigAdmin by a user of the BigAdmin community.
### Sun Microsystems, Inc. is not responsible for the
### contents or the code enclosed.
###
###
### Copyright Sun Microsystems, Inc. ALL RIGHTS RESERVED
### Use of this software is authorized pursuant to the
### terms of the license found at
### http://www.sun.com/bigadmin/common/berkeley_license.jsp
##############################################################################