Postfix: change sender in queued messages
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/...
I want to clarify two things.
- First, that answer was applied to sendmail NOT postfix.
- Second, direct-manipulating-raw-queue-files was not supported at all.
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.
/etc/postfix/main.cf:
smtp_generic_maps = hash:/etc/postfix/generic
/etc/postfix/generic:
[email protected] [email protected]
Don't forget to postmap /etc/postfix/generic
and run postfix reload
- Upside: You doesn't need to requeue the message
- Downside: Postfix will rewriting sender and recipient address that matching
[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.
/etc/postfix/main.cf:
sender_canonical_maps = hash:/etc/postfix/sender_canonical
/etc/postfix/sender_canonical:
[email protected] [email protected]
Run postmap /etc/postfix/sender_canonical
then run postfix reload
. Due the flow of postfix queue, you must re-queue the affected queue with command postsuper -r queueid
- Upside: Postfix not rewriting recipient address.
- Downside: You must requeue all affected message. But you can requeue all deferred with single command
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
# postsuper -h queueid # postcat -qbh queueid > tempfile.eml # vi tempfile.eml
Resubmit queue and delete old queue
# sendmail -f $sender $recipient < tempfile.eml # postsuper -d queueid
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 of q
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.