Postfix Mailqueue leeg maken.

Soms wil het wel eens voorkomen dat er teveel emails in de queue staan die je niet meer afgeleverd wilt hebben. De reden daarvoor zijn legio, een script dat misgegaan is of een account waar heel veel spam op binnen gekomen is maar in de queue blijft hangen.

Om de postfix mail queue in zijn geheel te wissen gebruik je het volgende commando
postsuper -d ALL

Om alleen een bepaakde queue te wissen bv de deferred gebruik je dit commando
postsuper -d ALL deferred

Dit zijn de standaard commandos, maar het wil ook voorkomen dat je in een queue alleen de berichten wilt weggooien die een bepaald email adres bevatten.
Dat kan je doen door het volgende perl script in een bestand te zetten het het te runnen met als parameter het filter waar de email aan moet voldoen.

#!/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,"|postsuper -d -") || die "couldn't open postsuper" ;

foreach (keys %Q) {
print POSTSUPER "$_\n";
};
close(POSTSUPER);

Je gebruikt het script als volgt, om alle emails met een emailadres te wissen die je dit:
./postfix-delete.pl bestaatniet@rsquare.org

Of van een domein:
./postfix-delete.pl rsquare.org