For more detailed information, see http://pobox.com/~djb/proto/immhf.html.
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.
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.
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.
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.
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.
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.
djb fred -> djb, fred
qmail-inject removes all Return-Path header fields.
qmail-inject also removes any Content-Length fields.