NAME¶
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
http://pobox.com/~djb/proto/immhf.html.
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
An
address group has some text, a colon, a list of 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 following 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 following 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: ;
This complies with RFC 822; it also works around some strange
sendmail
behavior, in case the message is passed 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 message 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
resent if it contains any of the following fields:
Resent-Sender,
Resent-From,
Resent-Reply-To,
Resent-To,
Resent-Cc,
Resent-Bcc,
Resent-Date,
Resent-Message-ID.
If a message is resent,
qmail-inject changes its behavior 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 present; same
for
Resent-Message-Id. It does
not add new
Date or
Message-Id fields.
OTHER FEATURES¶
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.
qmail-inject also removes any
Content-Length fields.
SEE ALSO¶
addresses(5),
envelopes(5),
qmail-inject(8)