---
name: "qmail-header"
section: "5"
platform: "linux"
package: "qmail"
version: "1.06-6.2~deb10u1"
release: "Debian 10 (Buster)"
platforms: ["linux"]
url: "https://new.carta.tech/qmail-header"
---

# qmail-header(5)

format of a mail message

## 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)](/addresses/5.md), [envelopes(5)](/envelopes/5.md), [qmail-inject(8)](/qmail-inject/8.md)
