How can I forward mail while saving a copy using postfix and mysql?

Solution 1:

I figured this out. Basically I need to modify the mysql table that saves the aliases so that it supports multiple aliases per address, making it possible to have delivery setup for both the local domain and a remote email.

This works so far, though I've heard that some people attempting this have gotten duplicate emails to the forwarded email account. So far, I have not experienced this.

I was using postfixadmin to manage the accounts, but it doesn't support this usage, so I've had to modify the source code, so that it both displays, edits and deletes aliases properly.

The main lesson here is that when using mysql a single key can be mapped to multiple results, by setting a new primary key i.e. "id" but keeping your postfix query logic the same. The multiple results returned are the same as multiple results in the default dbm/bd files, except that you must create a new record with the same key rather than a single key with some kind of delimited result.

HTH others!

This should work with any maps in mysql.

Solution 2:

If you have virtual account defined in virtual_mailbox_maps, and you want to redirect AND keep message, you have to insert 2 aliases into alias map:

account@example.com redirect@anotherdomain.com
account@example.com account@example.com

And this syntax will redirect any mail to account@example.com to redirect@anotherdomain.com AND will check if you have user account@example.com in virtual_mailbox_maps, and if so - save it.

update Or you can even use (@Tim Heagele thanks for the comment)

account@example.com account@example.com redirect@anotherdomain.com 

Solution 3:

Do you have local accounts for all users?

I've used a .forward file with something like:

user@new-mail-server.example.com, \user

which forwards a copy and keeps a copy in the local spool as well.


Solution 4:

The very simple solution is to include the source address in a comma-separated list in the destination column. E.g.:

insert into virtual_aliases (domain_id, source, destination) 
values (1, 'account1@domain1.com', 'account1@domain1.com,account2@domain2.com');

That works for me.


Solution 5:

It's probably more kosher to dispatch from postfix' main.cf:

Say, in main.cf:

### let's archive some incoming/outgoing mail:
recipient_bcc_maps = hash:/etc/postfix/recipient-bcc
sender_bcc_maps    = hash:/etc/postfix/sender-bcc

and in the relevant files (recipient-bcc and sender-bcc) for example:

@sender.domain a.local@address

Don't forget to (re)build the databases after editing the files:

postmap hash:recipient-bcc
postmap hash:sender-bcc