The sendmail program provides the ability to use
queue directories other than the one listed in the configuration
file's QueueDirectory
(Q
) option (see Section 34.8.48).
Other queue directories can be used to
solve an assortment of problems. One example is a site
being down for an extended period.
When a lot of mail is sent to such a site,
messages collect in the queue and eventually start
timing out.
By moving those messages to a separate
queue directory and processing it at a later time (when that site
is back up), unnecessary bouncing of mail can be prevented.
Note that the QueueDirectory
(Q
) option is not safe.
If its value is changed by anyone other
than root, sendmail runs as an ordinary user.
If a site is down, messages to that site can collect in the queue. If the site is expected to be down for a protracted period of time, those queued messages will begin to time out and bounce. To prevent them from bouncing, you can move them to a separate queue directory. Later, when the down site comes back up, you can process that separate queue.
To move the affected messages to a separate queue, you may use a Bourne shell script like the following:
#!/bin/sh set -u QUEUE=/var/spool/mqueue NEWQ=/var/spool/newqueue if [ ! -d $QUEUE ] then echo "${QUEUE}: Does not exist or is not a directory" exit 1 fi if [ ! -d $NEWQ ] then mkdir -p $NEWQ if [ $? -ne 0 ] then echo "${NEWQ}: Can't create" exit 2 fi fi find ${QUEUE} -type f -name qf* -print |\ while read QF do IDENT=`echo $QF | sed -e "s,^${QUEUE}/qf,,"` grep "^R" ${QUEUE}/qf${IDENT} echo -n "move ${IDENT}? (y/n) " read answer case $answer in [nN]*) continue;; *) ;; esac mv ${QUEUE}/*${IDENT} $NEWQ if [ $? -ne 0 ] then echo "Move failed" exit 3 else echo "Move succeeded" fi done /usr/lib/sendmail -OQueueDirectory=${NEWQ} -bp
This script creates a new queue directory, $NEWQ, if it doesn't
exist. It then prints the recipient list for each qf
file
in the queue (the grep(1) in $QUEUE) and asks whether you want to
move that file. If you answer yes, all the files that compose
the queued message are moved into $NEWQ.
After all the messages have been moved, the contents of $NEWQ are
printed using the QueueDirectory
(Q
) option:
%/usr/lib/sendmail -OQueueDirectory=${NEWQ} -bp
When the down site comes back up at a later time, the messages that have been saved in $NEWQ can be delivered by running the following command by hand:
%/usr/lib/sendmail -OQueueDirectory=/var/spool/newqueue -OTimeout.queuereturn=99d -q
The -oTimeout.queuereturn=99d
causes the time to live in
the queue to be extended to 99 days.
This prevents the held mail in ${NEWQ} from wrongly
bouncing when you try to deliver it.