Canonical Mapping
The optional canonical file specifies an address mapping for local and non-local addresses. The mapping is used by the cleanup(8) daemon. The address mapping is recursive.

The file serves as input to the postmap(1) command. The result, an indexed file in dbm or db format, is used for fast searching by the mail system.

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). Think Sendmail rule set S3, if you like.

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 domain map for that purpose.

The canonical mapping is not to be confused with local aliasing. Use the mail aliases map for that purpose.

The format of the canonical mappings is as follows, mappings being tried in the order as listed:

In all the above forms, when address has the form @otherdomain, the result is the same user in otherdomain.

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.