Monday, 27 September 2010

Postfix Flush the Mail Queue

Traditional "sendmail -q" command flushes mail queue. Under Postfix, just enter the following to flush the mail queue
postfix flush
OR
postfix -f

To see mail queue, enter:
mailq

To remove all mail from the queue, enter:
postsuper -d ALL

To remove all mails in the deferred queue, enter:
postsuper -d ALL deferred

postfix-delete.pl script


Following script deletes all mail from the mailq which matches the regular expression specified as the first argument (Credit: ??? - I found it on old good newsgroup)

#!/usr/bin/perl

$REGEXP = shift || die "no email-adress given (regexp-style, e.g. bl.*@yahoo.com)!";

@data = qx;
for (@data) {
if (/^(w+)(*|!)?s/) {
$queue_id = $1;
}
if($queue_id) {
if (/$REGEXP/i) {
$Q{$queue_id} = 1;
$queue_id = "";
}
}
}

#open(POSTSUPER,"|cat") || die "couldn't open postsuper" ;
open(POSTSUPER,"|postsuper -d -") || die "couldn't open postsuper" ;

foreach (keys %Q) {
print POSTSUPER "$_n";
};
close(POSTSUPER);


For example, delete all queued messages from or to the domain called fackspamdomain.com, enter:


./postfix-delete.pl fackspamdomain.com

Delete all queued messages that contain the word "xyz" in the e-mail address:


./postfix-delete.pl xyz

Updated for accuracy.

No comments:

Post a Comment