The sendmail program can run in any of several
modes, each of which determines its behavior. When
sendmail first starts to run, it sets its mode
based on the setting of its DeliveryMode option
(DeliveryMode) and places the character representing
that mode into this ${deliveryMode} macro. If
sendmail is run with the -odi
command-line switch, for example, this
${deliveryMode} macro is given the value
i. Once the sendmail program
is running, its delivery mode can be changed for a variety of
reasons. When it starts to process the queue, for example, the mode
is changed to d (for deliver).
One use for the ${deliveryMode} macro can be seen
in the standard configuration file:
SBasic_check_relay
# check for deferred delivery mode
R$* $: < $&{deliveryMode} > $1
R< d > $* $@ deferred
Here, the Basic_check_relay rule set is called to
determine whether mail from the connecting host should be accepted.
Because the hostname of the connecting host is not looked up with DNS
when in deferred mode, many necessary policy checks should not be
performed (such as access database lookups)
because the true hostname might not be known. These rules cause those
checks to be skipped when in deferred mode. Later, when the message
is processed from the queue, the hostname will be looked up with DNS.
Because it is unlikely that the sendmail daemon
will be run with DeliveryMode=d set in the
configuration file, there is no need to prefix
${deliveryMode} with an ampersand in the first
rule. We did so here because "good
style" says to always use the ampersand.
The ${deliveryMode} macro is transient. If it is
defined in the configuration file or in the command line, that
definition can be ignored by sendmail.