Postfix E-Mail bleibt in der Warteschlange (queue) hängen, die E-Mail soll nun mit postsuper und postcat an einen anderen Empfänger umgeleitet werden.

Dieses Szenario kann in Erscheinung treten, wenn zum ursprünglichen Empfänger keine E-Mails zugestellt werden können, zum Beispiel mit Erreichen der Mailbox Speicher Limite, oder der Server mit Fehler antwortet.
Hier kann es hilfreich sein, die E-Mail vorübergehend an einen anderen Empfänger zu senden. Der Beitrag zeigt die Schritte, um eine in der Postfix Queue verbleibende E-Mail an einen alternativen Empfänger zu senden.
E-Mail auf on-hold mit postqueue postsuper
Zuerst sucht man in der Postfix Queue die Queue-ID der betreffenden E-Mail, diese man an eine andere Empfänger Adresse senden möchte.
$ postqueue -p | grep 'john@example.org' -B 2
Der Parameter -B 2 gibt zusätzlich zwei Zeilen vor gesuchter Parse aus.
Die Ausgabe kann in etwa wie die folgende aussehen.
BCD2C3035D31! 37023 Thu Feb 17 08:59:55 suite102@mailings.daydeal.net
(connect to 12.34.56.78[12.34.56.78]:25: Connection timed out)
john@example.org
Hier wurde eine E-Mail an john@example.org gesendet, die ich nun an eine andere Adresse zustellen möchte. Die Queue-ID ist BCD2C3035D31
die wir im weiteren Verlauf benötigen.
Alternativ lassen sich auch alle E-Mails jeder Postfix Queue auflisten.
$ mailq
Um zu verhindern dass Postfix versucht die E-Mail in der Zwischenzeit auszuliefern, setzen wir diese in Wartestellung mit -h auf on hold.
$ postsuper -h BCD2C3035D31
postsuper: BCD2C3035D31: placed on hold
postsuper: Placed on hold: 1 message
Die E-Mails werden mit on hold nicht gelöscht. Das Ausrufezeichen (!) gibt an, das die Nachricht in Wartestellung ist.
Nun extrahiert man die E-Mail und speichert sie in eine temporäre Datei.
$ postcat -qbh BCD2C3035D31 > /tmp/email.eml
E-Mail aus Postfix Queue senden
Nachdem die E-Mail nun extrahiert ist, kann man diese aus der queue an einen anderen Empfänger senden, mit Postfix postsuper und sendmail.
$ sendmail -f john@example.org mike@domain.org < /tmp/email.eml
Die E-Mail wird von john@example.org an mike@domain.org gesendet.
Die Postfix Deffered Queue nach aufgeschoben E-Mails durchsuchen.
$ postqueue -vp
Nachdem die Zustellung mit postsuper und sendmail an die neue E-Mail-Adresse bestätigt wurde, kann die E-Mail aus der Postfix queue gelöscht werden.
$ postsuper -d BCD2C3035D31
postsuper: BCD2C3035D31: removed
postsuper: Deleted: 1 message
Die temporäre Datei /tmp/email.eml löschen.
$ rm -f /tmp/email.eml
Hilfreiche Postfix Kommandos
In die E-Mail schauen mit postcat.
$ postcat -vq BCD2C3035D31
E-Mails freigeben, die in die Warteschleife gelegt wurden.
$ postsuper -H BCD2C3035D31
postsuper: BCD2C3035D31: released from hold
postsuper: Released from hold: 1 message
Warteschlange leeren, es wird versucht alle in der Warteschlange befindlichen E-Mails zuzustellen.
$ postqueue -f
Alle E-Mails in der Postfix deffered queue löschen.
$ postsuper -d ALL deferred
Conclusion
Wie in diesem Beitrag aufgezeigt wird, ist es möglich E-Mails aus der Postfix Warteschlange nach auf Hold setzen, diese temporär an andere Empfänger zu senden. Ebenfalls werden verbleibende E-Mails aus der Postfix Queue zur System Hygiene wieder gelöscht.