Next: Functions and Modules, Previous: Simplest Configurations, Up: Tutorial [Contents][Index]
Programs consisting of a single action are rarely useful. In most cases you will want to do some checking and decide whether to process the message depending on its result. For example, if you do not want to accept messages from the address ‘<badguy@some.net>’, you could write the following program:
prog envfrom do if $f = "badguy@some.net" reject else accept fi done
This example illustrates several important concepts. First or
all, $f
in the third line is a Sendmail macro
reference. Sendmail macros are referenced the same way as in
sendmail.cf, with the only difference that curly braces around
macro names are optional, even if the name consists of several
letters. The value of a macro reference is always a string.
The equality operator (‘=’) compares its left and right
arguments and evaluates to true if the two strings are exactly the
same, or to false otherwise. Apart from equality, you can use the
regular relational operators: ‘!=’, ‘>’, ‘>=’, ‘<’
and ‘<=’. Notice that string comparison in mailfromd
is always case sensitive. To do case-insensitive comparison,
translate both operands to upper or lower case (See tolower, and
see toupper).
The if
statement decides what actions to execute depending
on the value its condition evaluates to. Its usual form is:
if expression then-body [else else-body] fi
The then-body is executed if the expression evaluates to
true
(i.e. to any non-zero value). The optional
else-body is executed if the expression yields
false
(i.e. zero). Both then-body and else-body can contain
other if
statements, their nesting depth is not limited. To
facilitate writing complex conditional statements, the elif
keyword can be used to introduce alternative conditions, for example:
prog envfrom do if $f = "badguy@some.net" reject elif $f = "other@domain.com" tempfail 470 "Please try again later" else accept fi done
See switch, for more elaborate forms of conditional branching.
Next: Functions and Modules, Previous: Simplest Configurations, Up: Tutorial [Contents][Index]