Rule set 0 checks for errors and selects delivery agents. First it disposes of the null address:
R<@> $#local $: <@>
Recall from Section 17.1.1.3, "Handle null address" that the null address needs to be disposed of locally.
Next a whole series of error conditions need to be detected before they can lead to harm:
R$* : $* ; <@> $#error $@ 5.1.3 $: "list:; syntax illegal for recipient addresses" R<@ $+> $#error $@ 5.1.1 $: "user address required" R$* <$* : $* > $* $#error $@ 5.1.1 $: "colon illegal in host name part" R$* < @ . > $* $#error $@ 5.1.2 $: "invalid host name"
First, addresses are checked to see whether they are of the List:;
form
(see Section 17.1.2.1, "A rule to handle List:;") and, if so, are considered errors. Then the
focused address is screened for missing user parts, colons in the host
name, and unresolvable hostnames. Any such addresses are rejected
as errors.
The rest of rule set 0 selects delivery agents. It can be simple or complex depending on your specific needs. In its simplest form, it detects local addresses and network mail:
R$+ < @ $=w . > $#local $: $1 regular local name R$* < @ $* > $* $#smtp $@ $2 $: $1 < @ $2 > $3 user@host.domain
Rule set 0 can also do mailertable lookups (see Section 19.6.14) and forward to a hub:
R< $+ > $* $: < $(mailertable $1 $) > $2 lookup R$* < @ $* > $* $: $>95 < $S > $1 < @ $2 > $3 glue on smarthost name
Note that these rules would not be grouped right next to each other. We presented them like this just to give you the flavor of a rule set 0, without the details. Leap ahead to Section 29.6, "Rule Set 0" if you hunger for more.