Next: Conditional Execution, Previous: Start Up, Up: Tutorial [Contents][Index]
The mailfromd
script file contains a
series of declarations of the handler procedures. Each
declaration has the form:
prog name do … done
where prog
, do
and done
are the keywords,
and name is the state name for this handler. The dots in the
above example represent the actual code, or a set of
commands, instructing mailfromd
how to process the message.
For example, the declaration:
prog envfrom do accept done
installs a handler for ‘envfrom’ state, which always approves the
message for delivery, without any further interaction with
mailfromd
.
The word accept
in the above example is an action.
Action is a special language statement that instructs the
run-time engine to stop execution of the program and to return a
response code to the Sendmail
. There are five actions, one
for each response code: continue
, accept
, reject
,
discard
, and tempfail
. Among these, reject
and
discard
can optionally take one to three arguments. There are
two ways of supplying the arguments.
In the first form, called literal or traditional notation,
the arguments are supplied as additional words after the action name,
separated by whitespace. The first argument is a three-digit
RFC 2821 reply code. It must begin with ‘5’ for
reject
and with ‘4’ for tempfail
. If two arguments
are supplied, the second argument must be either an extended
reply code (RFC 1893/2034) or a textual string to be
returned along with the SMTP reply. Finally, if all three
arguments are supplied, then the second one must be an extended reply
code and the third one must supply the textual string. The following
examples illustrate all possible ways of using the reject
statement in literal notation:
reject reject 503 reject 503 5.0.0 reject 503 "Need HELO command" reject 503 5.0.0 "Need HELO command"
Please note the quotes around the textual string.
Another form for these action is called functional notation, because it resembles the function syntax. When used in this form, the action word is followed by a parenthesized group of exactly three arguments, separated by commas. The meaning and ordering of the argument is the same as in literal form. Any of three arguments may be absent, in which case it will be replaced by the default value. To illustrate this, here are the statements from the previous example, written in functional notation:
reject(,,) reject(503,,) reject(503, 5.0.0) reject(503,, "Need HELO command") reject(503, 5.0.0, "Need HELO command")
Next: Conditional Execution, Previous: Start Up, Up: Tutorial [Contents][Index]