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.

Tags:

Queue

Postfix