Postfix virtual alias table incorrectly matching regexp rules

I'm setting up a postfix server with virtual alias table to redirect my emails based on regexp rules.

I set this line in /etc/postfix/ :
virtual_alias_maps = regexp:/etc/postfix/virtual

My /etc/postfix/virtual is in the code snippet below.

My goal is to have a list of domains, where :
- all emails sent to tech@thesedomains are forwarded to
- all emails sent to anythingelse@thesedomains (catch-all) are forwarded to

When I test this file with postmap, everything is ok :
# postmap -q regexp:/etc/postfix/virtual
# postmap -q regexp:/etc/postfix/virtual

However, when I apply the config, and send a test email to, the mail is sent to instead.
The log file /var/log/maillog show this :
 XXXXXXXXXXXX: to=<>, orig_to=<>, relay=...

If I remove the last line of the /etc/postfix/virtual, the mails to tech@domains are sent to their correct destination.

According to the manual :
"Patterns are applied in the order as specified in the table,  until  a  pattern  is  found that matches the search string".
So the first matching pattern, and not the second one, should be used (as postmap correctly does).

Any idea why ?

/^domain1\.com$/ DOMAIN
/^domain2\.com$/ DOMAIN

Open in new window

Who is Participating?
BenMorelConnect With a Mentor Author Commented:
Ok fixed it, needed a 1-1 mapping to stop the recursion :
/^domain1\.com$/ DOMAIN
/^domain2\.com$/ DOMAIN

Open in new window

All Courses

From novice to tech pro — start learning today.