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:
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 for-
mat 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.
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)
5 s/qmail:(qmail-header)
Man(1) output converted with
man2html