When Is a Macro Expanded?
A sendmail macro can be expanded either immediately or at runtime, depending on where the expansion takes place in the configuration file.
Macros are expanded in rule sets as the configuration
file is read and parsed by
sendmail, and (beginning with
V8.7) so are macros in rule set names (Macros in Rule Set Names on page 686)
and in database maps declared with the K
configuration command
(The K Configuration Command on
page 882). In other configuration lines, expansion
is deferred until sendmail
actually needs to use that value. In yet others,
macros are neither recognized nor expanded.
To illustrate, macros used in header commands are not expanded until the headers of a mail message are processed:
H?x?Full-Name: $x
Here, $x
($x on page 851) can change as
sendmail is running. It
contains as its value the full name of the sender.
Clearly, this macro should not be expanded until
that full name is known.
On the other hand, macros in rules are always expanded
when the configuration file is
read. Therefore, macros such as
$x
should never
be used in rules because the configuration file is
read long before mail is processed:
R$x ($x)
Rules such as this won’t work because $x
lacks a value when
the configuration file is read. This rule will be
expanded to become meaningless:
R ( )
Note that the $
digit
positional operator (Copy by Position: $digit on
page 661) in the RHS cannot be used to reference
defined macros in the LHS. Consider this example, in
which {HOST}
has the value ...
Get sendmail, 4th Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.