A mail message generally consists of a message body, which is the text
of the message, and special administrative data specifying recipients,
transport medium, etc., like what you see when you look at a physical
letter's envelope.
This administrative data falls into two categories. In the first category is
any data that is specific to the transport medium, like the address of sender
and recipient. It is therefore called the envelope. It
may be transformed by the transport software as the message is passed along.
The second variety is any data necessary for handling the mail message, which
is not particular to any transport mechanism, such as the message's subject
line, a list of all recipients, and the date the message was sent. In many
networks, it has become standard to prepend this data to the mail message,
forming the so-called mail header. It is offset from the
mail body by an empty
line.[1]
Most mail transport software in the Unix world use a header format outlined
in RFC-822. Its original purpose was to specify a standard for use on the
ARPANET, but since it was designed to be independent from any environment, it
has been easily adapted to other networks, including many UUCP-based networks.
RFC-822 is only the lowest common denominator, however. More recent
standards have been conceived to cope with growing needs such as
data encryption, international character set support, and MIME
(Multipurpose Internet Mail Extensions, described in RFC-1341 and other RFCs).
In all these standards, the header consists of several lines separated
by an end-of-line sequence. A line is made up of a field name, beginning in
column one, and the field itself, offset by a colon and white space. The
format and semantics of each field vary depending on the field name. A
header field can be continued across a newline if the next line begins
with a whitespace character such as tab. Fields can appear in any order.
A typical mail header may look like this:
Usually, all necessary header fields are generated by the mailer interface you
use, like elm, pine,
mush, or mailx. However, some are
optional and may be added by the user. elm, for example,
allows you to edit part of the message header. Others are added by the mail
transport software. If you look into a local mailbox file, you may see each
mail message preceded by a “From” line (note: no colon). This is
not an RFC-822 header; it has been inserted by your mail
software as a convenience to programs reading the mailbox. To avoid potential
trouble with lines in the message body that also begin with
“From,” it has become standard procedure to escape any such
occurrence by preceding it with a > character.
This list is a collection of common header fields and their meanings:
- From:
This contains the sender's email address and possibly the
“real name.” A complete zoo of formats is used here.
- To:
This is a list of recipient email addresses. Multiple recipient addresses
are separated by a comma.
- Cc:
This is a list of email addresses that will receive “carbon copies”
of the message. Multiple recipient addresses are separated by a comma.
- Bcc:
This is a list of email addresses that will receive “carbon copies”
of the message. The key difference between a “Cc:” and a
“Bcc:” is that the addresses listed in a “Bcc:” will
not appear in the header of the mail messages delivered to any
recipient. It's a way of alerting recipients that you've sent copies of the
message to other people without telling them who those others are. Multiple
recipient addresses are separated by a comma.
- Subject:
Describes the content of the mail in a few words.
- Date:
Supplies the date and time the mail was sent.
- Reply-To:
Specifies the address the sender wants the recipient's reply directed to.
This may be useful if you have several accounts, but want to receive the bulk
of mail only on the one you use most frequently. This field is optional.
- Organization:
The organization that owns the machine from which the mail originates. If your
machine is owned by you privately, either leave this out, or insert
“private” or some complete nonsense. This field is not described
by any RFC and is completely optional. Some mail programs support it directly,
many don't.
- Message-ID:
A string generated by the mail transport on the originating system. It uniquely
identifies this message.
- Received:
Every site that processes your mail (including the machines of sender and
recipient) inserts such a field into the header, giving its site name, a
message ID, time and date it received the message, which site it is from,
and which transport software was used. These lines allow you to trace which
route the message took, and you can complain to the person responsible if
something went wrong.
- X-anything:
No mail-related programs should complain about any header that starts
with X-. It is used to implement
additional features that have not yet made it into an RFC, or never
will. For example, there was once a very large Linux mailing list server that
allowed you to specify which channel you wanted the mail to go to by
adding the string X-Mn-Key: followed by the channel name.