MAILDELIVERY(F) UNIX System V
Name
maildelivery - user delivery specification file
Description
The delivery of mail by the local channel can run through
various courses, including using a user tailorable file.
The delivery follows the following strategy, giving up at
any point it considers the message delivered.
1) If the address indicates a pipe or file default,
then that is carried out.
2) The file .maildelivery (or something similar) in
the home directory is read if it exists and the
actions in it are followed.
3) A system-wide file is consulted next, such as
/usr/lib/maildelivery and the actions are similar
to step 2.
4) If the message still hasn't been delivered, then it
is put into the user's normal mailbox (.mail or
mailbox) depending on the system.
The format of the .maildelivery file is
field <FS> pattern <FS> action <FS> result <FS> string
where:
field is name of a field that is to be searched for a
pattern. This is any header field that you might
find in a message. The most commonly used headers
are From, to, cc, subject and sender. As well as
the standard headers, there are some pseudo-
headers that can also be used. These are:
source The out-of-band sender information. This
is the address MMDF would use for
reporting delivery problems with the
message.
addr the address that was used to mail to
you, normally yourname or
yourname=string (see below).
default if the message hasn't been delivered
yet, this field is matched.
* this case is always true regardless of
any other action.
pattern is some sequence of characters that may be matched
in the above field. Case is not significant.
action is one of the mail delivery actions supported by
the local channel. Currently the supported
actions are file or >, which appends the message
to the given file, with delimiters; pipe or |,
which starts up a process with the message as the
standard input; and destroy which throws the
message away.
For piped commands, the exit status of the command
is significant. An exit status of 0 implies that
the command succeeded and everything went well. An
exit status of octal 0300-0377 indicates that a
permanent failure occurred and the message should
be rejected. Any other exit status indicates a
temporary failure and the delivery attempt will be
aborted and restarted at a later time.
result is one of the letters A, R or ? which stand for
Accept, Reject and "Accept if not delivered yet".
They have the following effects:
A If the result of this line's action is
OK, then the message can be considered
delivered.
R The message is not to be considered
delivered by this action.
? This is equivalent to A except that the
action is not carried out if the message
has already been accepted.
The file is always read completely so that several matches
can be made, and several actions taken. As a security
check, the .maildelivery file must be owned by either the
user or root, and must not have group or general write
permission. In addition the system delivery file has the
above restrictions but must also be owned by root. If the
field specified does not need a pattern, a dash (-), or
similar symbol is usually inserted to show that the field is
present but not used. The field separator character can be
either a tab, space or comma (,). These characters can be
included in a string by quoting them with double quotes (");
double quotes can be included with a backslash '\'.
MMDF treats local addresses which contain an equal sign
('=') in a special manner. Everything in a local address
from an equals sign to the '@' is ignored and passed on to
the local channel. The local channel will make the entire
string available for matching against the addr string of the
.maildelivery file. For example, if you were to subscribe
to a digest as "foo=digest@bar.NET", submit(ADM) and the
local channel will verify that it is legal to deliver to
"foo", but then the entire string "foo=digest" will be
available for string matching against the .maildelivery file
for the addr field.
Environment
The environment in which piped programs are run contains a
few standard features, specifically:
HOME is set to the user's home directory.
USER is set to the user's login name.
SHELL is set to the user's login shell (defaults to /bin/sh).
The default umask is set up to 077, this gives a very
protective creation mask. If further requirements are
needed, then a shell script can be run first to set up more
complex environments.
There are certain built-in variables that you can give to a
piped program. These are $(sender), $(address), $(size),
$(reply-to) and $(info). $(sender) is set to the return
address for the message. $(address) is set to the address
that was used to mail to you, normally `yourname' or
`yourname=string'. $(size) is set to the size in bytes of
this message. $(reply-to) is set to the Reply-To: field (or
the From: field if the former is missing) and so can be used
for automatic replies. $(info) is the info field from the
internal mail header and is probably only of interest to the
system maintainers.
Example
Here is a rough idea of what a .maildelivery file looks
like:
# lines starting with a '#' are ignored.
# as are blank lines
# file mail with mmdf2 in the "To:" line into file mmdf2.log
To mmdf2 file A mmdf2.log
# Messages from mmdf pipe to the program err-message-archive
From mmdf pipe A err-message-archive
# Anything with the "Sender:" address "uk-mmdf-workers"
# file in mmdf2.log if not filed already
Sender uk-mmdf-workers file ? mmdf2.log
# "To:" unix - put in file unix-news
To Unix > A unix-news
# if the address is jpo=mmdf - pipe into mmdf-redist
Addr jpo=mmdf | A mmdf-redist
# if the address is jpo=ack - send an acknowledgement copy back
Addr jpo=ack | R resend -r $(reply-to)
# anything from steve - destroy!
from steve destroy A -
# anything not matched yet - put into mailbox
default - > ? mailbox
# always run rcvalert
* - | R rcvalert
Files
$HOME/.maildelivery normal location
/usr/lib/maildelivery the system file. This
should be protected.
The /usr/lib/maildelivery file contains contents such as:
default - pipe A stdreceive
* - pipe R ttynotify
This allows the system to interfaces with non-standard mail
systems that do not support delimiter-separated mailboxes.
See Also
rcvtrip(C)
(printed 4/27/90) MAILDELIVERY(F)