qmail-header - format of a mail message
OVERVIEW
At the top of every mail message is a highly structured
header. Many programs expect the header to carry certain
information, as described below. The main function of
qmail-inject is to make sure that each outgoing message
has an appropriate header.
For more detailed information, see RFC 822 and RFC 1123.
MESSAGE STRUCTURE
A message contains a series of header fields, a blank
line, and a body:
Received: (qmail-queue invoked by uid 666);
30 Jul 1996 11:54:54 -0000
From: djb@silverton.berkeley.edu (D. J. Bernstein)
To: fred@silverton.berkeley.edu
Date: 30 Jul 1996 11:54:54 -0000
Subject: Go, Bears!
I've got money on this one. How about you?
---Dan (this is the third line of the body)
Each header field has a name, a colon, some contents, and
a newline:
Subject: Go, Bears!
The field contents may be folded across several lines.
Each line past the first must begin with a space or tab:
Received: (qmail-queue invoked by uid 666);
30 Jul 1996 11:54:54 -0000
The field name must not contain spaces, tabs, or colons.
Also, an empty field name is illegal. qmail-inject does
not allow field names with unprintable characters.
Case is irrelevant in field names: subject and SUBJECT and
SuBjEcT have the same meaning.
ADDRESS LISTS
Certain fields, such as To, contain address lists.
An address list contains some number of addresses or
address groups, separated by commas:
a@b, c@d (Somebody), A Person <e@f>,
random group: g@h, i@j;, k@l
addresses, and a semicolon:
random group: g@h, i@j;
An address can appear in several forms. The most common
form is box@host.
Every address must include a host name. If qmail-inject
sees a lone box name it adds the default host name.
All host names should be fully qualified. qmail-inject
appends the default domain name to any name without dots:
djb@silverton -> djb@silverton.berkeley.edu
It appends the plus domain name to any name that ends with
a plus sign:
eric@mammoth.cs+ -> eric@mammoth.cs.berkeley.edu
A host name may be a dotted-decimal address:
djb@[128.32.183.163]
RFC 822 allows mailbox names inside angle brackets to
include source routes, but qmail-inject strips all source
routes out of addresses.
SENDER ADDRESSES
qmail-inject looks for sender address lists in the follow-
ing fields: Sender, From, Reply-To, Return-Path, Return-
Receipt-To, Errors-To, Resent-Sender, Resent-From, Resent-
Reply-To.
If there is no From field, qmail-inject adds a new From
field with the name of the user invoking qmail-inject.
RFC 822 requires that certain sender fields contain only a
single address, but qmail-inject does not enforce this
restriction.
RECIPIENT ADDRESSES
qmail-inject looks for recipient address lists in the fol-
lowing fields: To, Cc, Bcc, Apparently-To, Resent-To,
Resent-Cc, Resent-Bcc.
Every message must contain at least one To or Cc or Bcc.
qmail-inject deletes any Bcc field. If there is no To or
Cc field, qmail-inject adds a line
Cc: recipient list not shown: ;
through sendmail on another machine.
STAMPS
Every message must contain a Date field, with the date in
a strict format defined by RFC 822. If necessary qmail-
inject creates a new Date field with the current date (in
GMT).
Every message should contain a Message-Id field. The
field contents are a unique worldwide identifier for this
message. If necessary qmail-inject creates a new Message-
Id field.
Another important field is Received. Every time the mes-
sage is sent from one system to another, a new Received
field is added to the top of the message. qmail-inject
does not create any Received fields.
RESENT MESSAGES
A message is forwarded if it contains any of the following
fields: Resent-Sender, Resent-From, Resent-Reply-To,
Resent-To, Resent-Cc, Resent-Bcc, Resent-Date, Resent-Mes-
sage-ID.
If a message is forwarded, qmail-inject changes its behav-
ior as follows.
It deletes any Resent-Bcc field (as well as any Bcc
field); if there are no Resent-To or Resent-Cc fields,
qmail-inject adds an appropriate Resent-Cc line. It does
not add a Cc line, even if neither To nor Cc is present.
If there is no Resent-From field, qmail-inject adds a new
Resent-From field. It does not add a new From field.
qmail-inject adds Resent-Date if one is not already pre-
sent; same for Resent-Message-Id. It does not add new
Date or Message-Id fields.
OTHER FEATURES
For compatibility with sendmail, if qmail-inject sees a
line containing (the beginning of) a Message or Text
field, it will consider all further lines to be part of
the message body.
Addresses are separated by commas, not spaces. When
qmail-inject sees an illegal space, it inserts a comma:
djb fred -> djb, fred
qmail-inject removes all Return-Path header fields.
addresses(5), envelopes(5), qmail-inject(8)