Before the cleanup daemon stores inbound mail into the incoming queue, it uses the canonical table to rewrite all addresses in message envelopes and in message headers, local or remote. The mapping is useful to replace login names by Firstname.Lastname style addresses, or to clean up invalid domains in mail addresses produced by legacy mail systems.
The canonical mapping affects both message header addresses (i.e. addresses that appear inside messages) and message envelope addresses (for example, the addresses that are used in SMTP protocol commands).
Typically, one would use the canonical table to replace login names by Firstname.Lastname, or to clean up addresses produced by legacy mail systems.
The canonical mapping is not to be confused with virtual domain support. Use the virtual(5) map for that purpose.
The canonical mapping is not to be confused with local aliasing. Use the aliases(5) map for that purpose.
The format of the canonical table is as follows, mappings being tried in the order as listed in this help:
name = user@domain address = address
user@domain is replaced by address. This form has the highest precedence.
This form useful to clean up addresses produced by legacy mail systems. It can also be used to produce Firstname.Lastname style addresses, but see below for a simpler solution.
name = user address = address
user@site is replaced by address when site is equal to $myorigin, when site is listed in $mydestination, or when it is listed in $inet_interfaces.
name = @domain address = address
Every address in domain is replaced by address. This form has the lowest precedence.
In all the above forms, when address has the form @otherdomain, the result is the same user in other-domain.
ADDRESS EXTENSION When table lookup fails, and the address localpart contains the optional recipient delimiter (e.g.,user+foo@domain), the search is repeated for the unextended address (e.g. user@domain), and the unmatched extension is propagated to the result of table lookup. The matching order is: user+foo@domain, user@domain, user+foo, user, and @domain.
P.S. The table format does not understand quoting conventions.