To handle delivery to diverse recipients, the sendmail program uses the concept of an envelope. This envelope is analogous to the physical envelopes that are used for post office mail. Imagine that you want to send two copies of a document: one to your friend in the office next to yours and one to a friend across the country:
To: friend1, friend2@remote
After you photocopy the document, you stuff
each copy into a separate envelope. You hand one envelope to a clerk,
who carries it next door and hands it to
friend1
in the next office. This is like delivery
on your local machine. The clerk drops the other copy in the slot
at the corner mailbox, and the post office forwards
that envelope across the country to friend2@remote
.
This is like sendmail transporting a mail message to
a remote machine.
To illustrate what an envelope is, consider one way in which sendmail might run /bin/mail, a program that performs local delivery:
deliver to friend1's mailbox /bin/mail -d friend1 sendmail runs the envelope recipient
Here sendmail runs /bin/mail with a -d
, which
tells /bin/mail to append the mail message to friend1's mailbox.
Information that describes the sender or recipient, but is not part of the message header, is considered envelope information. The two may or may not contain the same information (a point we'll gloss over for now). In the case of /bin/mail, the email message showed two recipients in its header:
To: friend1, friend2@remote the header
But the envelope information that is given to /bin/mail showed only one (the one appropriate to local delivery):
-d friend1 specifies the envelope
Now consider the envelope of a message transported over the network. When sending network mail, sendmail must give the remote site a list of sender and recipients separate from and before it sends the mail message (header and body). Figure 1.2 shows this in a greatly simplified conversation between the local sendmail and the remote machine's sendmail.
The local sendmail tells the remote machine's sendmail
that there is mail from you (the sender
) and
for friend2@remote
.
It conveys this sender and recipient information separate from
and before it transmits the mail message that contains the header.
Because this information is conveyed separately from
the message header, it is called the envelope.
There is only one recipient listed in the envelope, whereas two were listed in the message header:
To: friend1, friend2@remote
The remote machine does not need to know about the local user,
friend1
, so that bit of recipient information
is excluded from the envelope.
A given mail message can be sent by using many different envelopes (like the two here), but the header will be common to them all.