General-Purpose Mail Filter
mailfromd script file contains a
series of declarations of the handler procedures. Each
declaration has the form:
prog name do … done
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
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
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:
tempfail. Among these,
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
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")
This document was generated on January 3, 2019 using makeinfo.Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved.