Following a complete re-installation we got a problem with the configuration: the sender address was wrong and some recipients (mail servers) rejected them.
So there is a bunch of mails stuck in the Postfix queue.
Ideally, a change of the sender address directly in the queued mails, and then flushing the queue would be optimal.
I tried this answer that addresses this very problem. But messages don't seem to be easily modifiable in the version I have (2.11.0).
For instance there is no /var/spool/mqueue
dir, but, instead, /var/spool/postfix/...
active
bounce
corrupt
defer
deferred
dev
etc
flush
hold
incoming
lib
maildrop
pid
private
public
saved
trace
usr
and the dir of interest is deferred
. I tried to modify a few files there changing the wrong domain with the correct one (and was careful to ensure only those were changed).
But then, those mails were moved to corrupt
, meaning that a simple text change doesn't seem to work (done with vi
).
Any other cleaner way to change the sender in queued mails?
I want to clarify two things.
So, you have several options here
1. smtp_generic_maps parameter
This answer inspired by this excellent answer. It will rewrite old-address to new-address automatically. You can define file to maps old-address to new-address.
Don't forget to
postmap /etc/postfix/generic
and runpostfix reload
[email protected]
.2. sender_canonical_address
To overcome the downside of first option, you can use
sender_canonical_maps
. This solution based on Postfix author suggestion. Same as first option, you can define file to maps old-address to new-address.Run
postmap /etc/postfix/sender_canonical
then runpostfix reload
. Due the flow of postfix queue, you must re-queue the affected queue with commandpostsuper -r queueid
postsuper -r ALL deferred
3. direct manipulating of postfix queue
This is manual old ways to modify queue for advanced processing. This answer came from postfix-users mailing lists
In short
Extract queue
Resubmit queue and delete old queue
For documentation of above command, refer to this page
Note:
Original solution from postfix-users mailing lists, use
postcat -q queueid >tempfile
to extract queue. This command will extract the header, body and meta-information of the queue. As pointed Azendale below,sendmail
will refuse to send this malformed email because of meta-information.Using
-bh
parameter in addition ofq
parameter will make postcat filter the output to header and body only, not including meta-information. A side benefit of this is the tempfile is in the format most email clients recognize as .eml format, allowing you to view the resulting (edited) message.Greate writeup. I had a problem with a mail server that had been running a few days with bad configuration and therefore there was a lot of queues that needed to be resent with new recipient. So I created two one liners to loop through all queues:
First one to find all queues, put them on hold, save them as .eml files and resend them:
Second for deleting the queues:
Just remember to check that there are no new queues that are not on hold before running this last code. Do that by issuing this and look for queue id's without an '!' at the end:
On could easily put those two one liners into one, but I felt I had more control by checking that the mails actually were received before deleting the queues.