User Tools

Site Tools


internet:mail:postfix_queue_mgmt

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
internet:mail:postfix_queue_mgmt [2014/01/09 10:51]
gcooper
internet:mail:postfix_queue_mgmt [2018/11/02 07:11] (current)
gcooper
Line 58: Line 58:
 ==== Purge Mail Queues ==== ==== Purge Mail Queues ====
  
-Delete all queued mail:+To delete all email in the queue from a domain run this command as root: 
 + 
 +postqueue -p | tail -n +2 | awk 'BEGIN { RS = "" } /@example\.com/ { print $1 }' | tr -d '*!' | postsuper -d - 
 + 
 +To delete all email in the queue From: a specific email address run this command as root: 
 + 
 +postqueue -p | tail -n +2 | awk 'BEGIN { RS = "" } /username@example\.com/ { print $1 }' | tr -d '*!' | postsuper -d -  
 + 
 +To delete all queued mail:
  
 <file> <file>
Line 64: Line 72:
 </file> </file>
  
-===== Delete Messages =====+===== Delete Messages by Reg-Ex ===== 
 + 
 +FIXME Untested!
  
 http://www.cyberciti.biz/tips/howto-postfix-flush-mail-queue.html http://www.cyberciti.biz/tips/howto-postfix-flush-mail-queue.html
  
 ==== postfix-delete.pl script ==== ==== postfix-delete.pl script ====
 +
 +:!: Once you list queued messages with ''postqueue -p'' and determine a reg-ex pattern of files you want to delete, you can use the following script to do the deletions.
  
 The following script deletes all mail from the any queue which matches the regular expression specified as the first argument. The following script deletes all mail from the any queue which matches the regular expression specified as the first argument.
Line 75: Line 87:
 #!/usr/bin/perl #!/usr/bin/perl
    
-$REGEXP = shift || die "no email-adress given (regexp-style, e.g. bl.*\@yahoo.com)!";+$REGEXP = shift || die "no email-adress given (regexp-style, e.g. bl.*\@yahoo.com)!\n";
    
 @data = qx</usr/sbin/postqueue -p>; @data = qx</usr/sbin/postqueue -p>;
Line 105: Line 117:
 </file> </file>
  
-Delete all queued messages that contain the word "xyzin the e-mail address:+Delete all queued messages that contain the word ''xyz'' in the e-mail address:
  
 <file> <file>
 ./postfix-delete.pl xyz ./postfix-delete.pl xyz
 </file> </file>
 +
 +===== Monitoring Postfix Queues =====
 +
 +http://stackoverflow.com/questions/226699/how-to-monitor-postfix-mta-status
 +
 +This script monitors queues and sends an alert via another mail server.
 +
 +<file>
 +#!/bin/bash
 +#
 +# Postfix queue length monitoring script (requires msmtp)
 +#
 +# This script checks the active, incoming, deferred and maildrop postfix queue directories.
 +#
 +# If the number of messages in any of these directories is more than $MAX_QUEUE_LENGTH,
 +# the script will generate an alert email and send it using msmtp. We use msmtp so that
 +# we can bypass the local postfix installation (since if the queues are getting big,
 +# the alert email may not be sent in time to catch the problem).
 +#
 +
 +#########################################################
 +# SET SCRIPT VARS
 +#########################################################
 +
 +# Path to msmtp binary (e.g. /usr/bin/msmtp on Debian systems)
 +MSMTP=/usr/bin/msmtp
 +
 +# Remote mail host (this is the mail server msmtp will use to send the alert. It should NOT be the local postfix installation)
 +MAILHOST=backup.mailserver.com
 +
 +# Remote mail port
 +MAILPORT=25
 +
 +# Mail protocol
 +MAILPROTO=smtp
 +
 +# Fully qualified domain name of local postfix installation
 +DOMAIN=primary.mailserver.com
 +
 +# From address
 +MAILFROM=postmaster@mailserver.com
 +
 +# Recipient (this address should not route to the local postfix installation, for obvious reasons)
 +MAILTO="alerts@anotherdomain.com"
 +
 +# Email subject
 +MAILSUBJECT="Postfix queue length alert for ${DOMAIN}"
 +
 +# MSMTP log file
 +LOGFILE=/var/log/msmtp.log
 +
 +# Root of the postfix queue dirs (e.g. /var/spool/postfix on Debian systems). Note: no trailing slash.
 +QUEUEDIR_ROOT="/var/spool/postfix"
 +
 +# Max queue length (if there are more messages in a queue than this number, we will send an alert)
 +MAX_QUEUE_LENGTH=10
 +
 +
 +#########################################################
 +# SCRIPT LOGIC STARTS HERE
 +#########################################################
 +
 +# Check msmtp binary exists
 +if [ ! -f ${MSMTP} ]
 +then
 +        echo "Cannot find ${MSMTP}. Exiting."
 +        exit 1
 +fi
 +
 +# Get the number of messages sitting in each postfix queue directory
 +Q_ACTIVE=$(find ${QUEUEDIR_ROOT}/active -type f | wc -l)
 +Q_INCOMING=$(find ${QUEUEDIR_ROOT}/incoming -type f | wc -l)
 +Q_DEFERRED=$(find ${QUEUEDIR_ROOT}/deferred -type f | wc -l)
 +Q_MAILDROP=$(find ${QUEUEDIR_ROOT}/maildrop -type f | wc -l)
 +
 +# If any of these queues contain more than $MAX_QUEUE_LENGTH issue an alert
 +if [ ${Q_ACTIVE} -gt ${MAX_QUEUE_LENGTH} -o ${Q_INCOMING} -gt ${MAX_QUEUE_LENGTH} -o ${Q_DEFERRED} -gt ${MAX_QUEUE_LENGTH} -o ${Q_MAILDROP} -gt ${MAX_QUEUE_LENGTH} ]; then
 +
 +    (
 +        echo "From: ${MAILFROM} "
 +        echo "To: ${MAILTO} "
 +        echo "Mime-Version: 1.0"
 +        echo 'Content-Type: text/plain; charset="iso-8859-1"'
 +        echo "Subject: ${MAILSUBJECT}"
 +        echo ""
 +        echo "One or more of the postfix queues on ${DOMAIN} has grown beyond ${MAX_QUEUE_LENGTH} messages in length."
 +    ) | ${MSMTP} --host=${MAILHOST} --port=${MAILPORT} --protocol=${MAILPROTO} --domain=${DOMAIN} --auth=off --tls=off --from=${MAILFROM} --logfile=${LOGFILE} --syslog=off --read-recipients
 +
 +    exit 2
 +
 +fi
 +
 +exit 0
 +</file>
 +
 +==== Via SNMP ====
 +
 +http://exchange.nagios.org/directory/Plugins/Email-and-Groupware/Postfix/Postfix-Queue-Monitor/details
 +
 +http://www.paessler.com/knowledgebase/en/topic/21223-monitoring-e-mail-queue-on-postfix
 +
 +
internet/mail/postfix_queue_mgmt.1389289903.txt.gz · Last modified: 2014/01/09 10:51 by gcooper