Postfix Flush the Mail Queue

Traditionally you use the « sendmail -q » command to flush mail queue under Sendmail MTA. Under Postfix MTA, just enter the following command 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</usr/sbin/postqueue -p>;

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

viaPostfix Flush the Mail Queue.