Another role of the sendmail program is to deliver mail messages to local users. A local user has a mailbox on the local file system. Delivering local mail is done by appending a message to the user's mailbox, by feeding the mail message to a program, or by appending the message to a file other than the user's mailbox.
In general, sendmail does not put mail messages directly into files. You saw the exception in the aliases file, in which you could specifically tell sendmail to append mail to a file. This is the exception, not the rule. Usually, sendmail calls other programs to perform delivery. Those other programs are called delivery agents.
In your sendmail.cf file you found two lines that defined local delivery agents, the ones that sendmail used to deliver mail to the local file system:
Mlocal, P=/bin/mail, F=lsDFMAw5:/|@rmn, S=10, R=20/40, Mprog, P=/bin/sh, F=lsDFMeu, S=10, R=20/40, D=$z:/,
The /bin/mail program is used to append mail to the user's mailbox. The /bin/sh program is used to run other programs that handle delivery.
The configuration file line that begins with Mlocal
defines how mail is appended to a user's mailbox file.
That program is usually /bin/mail but can easily
be a program such as deliver(1) or mail.local(8).
Under UNIX a user's mailbox is a single file that contains
a series of mail messages. The usual UNIX convention (but not the
only possibility) is that
each message in a mailbox begins with the five characters "From
" (the fifth is a blank space)
and ends with a blank line.
The sendmail program neither knows nor cares what a user's
mailbox looks like. All it cares about is the name of the
program that it must run to add mail messages to that mailbox.
In the example that program is /bin/mail.
The M
configuration lines that define delivery agents are
introduced in
Chapter 6, The Mail Hub and Delivery Agents,
and covered in detail in
Chapter 30, Delivery Agents.
Mail addresses that begin with a |
character are the
names of programs to run. You saw one such address in the
example aliases file:
ftphelp: "|/usr/local/bin/sendhelp"
Here, mail sent to the address ftphelp
is transformed
via an alias into the new address |/usr/local/bin/sendhelp
.
The |
character
at the start of this new address tells sendmail that this
is a program to run rather than a file to append to.
The intention here is that the program will receive the mail and
do something useful with it.
The sendmail program doesn't run mail delivery programs
directly. Instead, it runs a shell and tells that shell to
run the program. The name of the shell is listed
in the configuration file in a line
[5]
that begins with Mprog
:
[5] In actuality, delivery agent definitions often span multiple lines. You'll see this in Chapter 6.
Mprog, P=/bin/sh, F=lsDFMeu, S=10, R=20/40, D=$z:/,
In this example the shell is the /bin/sh(1). Other programs can appear in this line such as /bin/ksh(1), the Korn Shell, or smrsh(1), the sendmail restricted shell that is supplied with the source distribution.