if you insist on using this, then read on:
0. Introduction
needed:
1. postfix
2. procmail + formail
3. sudo
4. a user called "vpop", with disabled password and shell=/bin/false
1. Postfix setup
1a. /etc/postfix/master.cf
vpop unix - n n - - pipe
flags=F user=vpop argv=/usr/bin/sudo -u $nexthop /usr/lib/postfix/deliver-vpop $nexthop $recipient
1b. /etc/postfix/transports
for each virtual domain, you will need a line in /etc/postfix/transport.
use the following as an example:
# vpop:
virtual.domain vpop:fbloggs
another.domain vpop:jblow
a useful and interesting thing to note is that entries in
/etc/postfix/virtual have higher precedence than entries in the
transport file, so you can have some addresses at a domain being
delivered to their own pop box, and the remainder being delivered via
the vpop transport.
1c. /etc/postfix/main.cf
just like the 'local' transport, you have to limit the number of
destination recipients which can be delivered at one time. any more than
1 will break the addition of the X-Envelope-To: header, which is the
whole point of this exercise.
vpop_destination_concurrency_limit = 1
vpop_destination_recipient_limit = 1
1d. shell script to deliver the mail to the local mailbox
this is the shell script which is executed by the vpop transport.
It uses formail to add the X-Envelope-To header, and procmail to do
the final delivery to the user's mailbox. On a debian system, *all*
MTAs, MDAs, and MUAs use the same NFS-safe locking conventions by strict
policy. other unixes and linux distributions are not as consistent, so
you might have to do your own locking. be careful.
--cut here-- /usr/lib/postfix/deliver-vpop --cut here
#! /bin/sh
nexthop="$1"
recipient="$2"
ENVTO="X-Envelope-To: $recipient"
cat | \
/usr/bin/formail -Y -I "$ENVTO" | \
/usr/bin/procmail -Y -t -d "$nexthop"
--cut here-- /usr/lib/postfix/deliver-vpop --cut here
2. sudo setup
we need to allow the "vpop" dedicated user run the above shell script as
any user, so add the following lines to /etc/sudoers
Cmnd_Alias VPOP=/usr/lib/postfix/deliver-vpop
vpop ALL=(ALL) NOPASSWD: VPOP
3. Testing
Ok, configuration is done. now restart postfix and send a few test
messages to random addresses at the virtual domain. something like the
following should tell you whether it's working or not:
#! /bin/sh
VIRTUAL=$1
sendmail -t <<__EOF__
To: foo@$VIRTUAL
Cc: blah@$VIRTUAL
Bcc: secret@$VIRTUAL, very.secret@$VIRTUAL
Subject: test
secret
__EOF__
you should get 4 messages delivered to the virtual pop mailbox, all with
the same To: and CC: headers. There will be no visible BCC headers, and
each message will have a different X-Envelope-To: header.