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)