Just as all addresses are first rewritten by the canonify rule set 3, so are all addresses rewritten last by the final rule set 4. Beginning with V8.10 sendmail, that rule set is declared like this:
As the name final implies, the job is to undo any special processing done by the canonify rule set 3, such as focusing. In this section we'll examine some typical final rule set 4 rules.
Under some versions of sendmail a successful conversion to a fully qualified domain name leaves an extra dot trailing the result. This rule strips that dot:
# strip trailing dot off possibly canonical name R $* <@ $+. > $* $1 <@ $2 > $3
Note that this rule recursively removes as many trailing dots as it finds. Also note that the host part remains focused after rewriting.
Recall that the canonify rule set 3 converted the commas of source route addresses into colons (Section 19.3.3). The final rule set 4 now needs to restore those commas:
R $* : $+ :$+ <@ $+> $1 , $2 : $3 <@ $4> <route-addr> canonical
This rule recursively changes all but one (the rightmost) colon back into a comma.
As a special note, under V8 sendmail, envelope-sender route addresses are always surrounded by angle brackets when passed to the delivery agent. If this behavior is inappropriate for your site, beginning with V8.7 it is possible to prevent this heuristic by specifying the F=d delivery agent flag (F=d).
The final rule set 4 also removes angle brackets inserted by the canonify rule set 3 to focus on the host part of the address. This is necessary because they are used only by the internal logic of the configuration file. If they were mistakenly left in place, mail would fail:
# externalize local domain info R $* <$+> $* $1 $2 $3 defocus
After defocusing, the final rule set 4 might need to convert some addresses back to their original forms. For example, consider UUCP addresses at a site that still uses UUCP to transfer mail. They entered the canonify rule set 3 in the form host!host!user. The canonify rule set 3 rewrote them in the more normal user@host form, and added a .uucp to the end of the host. The following rule in the final rule set 4 converts such normalized UUCP addresses back to their original form so that they can be sent using UUCP software:
R $+ @ $-.uucp $2 ! $1 u@h.UUCP => h!u