qmail-header 5
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 :
.EX
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:
.EX
Subject: Go, Bears!
The field contents may be folded across several lines.
Each line past the first must begin with a space or tab:
.EX
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:
.EX
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:
.EX
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:
.EX
djb@silverton -> djb@silverton.berkeley.edu
It appends the
plus domain name to any name
that ends with a plus sign:
.EX
eric@mammoth.cs+ -> eric@mammoth.cs.berkeley.edu
A host name may be a dotted-decimal address:
.EX
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
.EX
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:
.EX
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)