qmail-header(5) qmail-header(5) NNAAMMEE qmail-header - format of a mail message OOVVEERRVVIIEEWW At the top of every mail message is a highly structured hheeaaddeerr. Many programs expect the header to carry certain information, as described below. The main function of qqmmaaiill--iinnjjeecctt is to make sure that each outgoing message has an appropriate header. For more detailed information, see hhttttpp::////ppoobbooxx..ccoomm//~~ddjjbb//pprroottoo//iimmmmhhff..hhttmmll. MMEESSSSAAGGEE SSTTRRUUCCTTUURREE A message contains a series of _h_e_a_d_e_r _f_i_e_l_d_s, a blank line, and a _b_o_d_y: 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 _n_a_m_e, a colon, some _c_o_n_t_e_n_t_s, 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. qqmmaaiill--iinnjjeecctt does not allow field names with unprintable characters. Case is irrelevant in field names: ssuubbjjeecctt and SSUUBBJJEECCTT and SSuuBBjjEEccTT have the same meaning. AADDDDRREESSSS LLIISSTTSS Certain fields, such as TToo, contain _a_d_d_r_e_s_s _l_i_s_t_s. An address list contains some number of _a_d_d_r_e_s_s_e_s or _a_d_d_r_e_s_s _g_r_o_u_p_s, separated by commas: a@b, c@d (Somebody), A Person , random group: g@h, i@j;, k@l An _a_d_d_r_e_s_s _g_r_o_u_p 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 _b_o_x_@_h_o_s_t. Every address must include a host name. If qqmmaaiill--iinnjjeecctt sees a lone box name it adds the _d_e_f_a_u_l_t _h_o_s_t _n_a_m_e. All host names should be fully qualified. qqmmaaiill--iinnjjeecctt appends the _d_e_f_a_u_l_t _d_o_m_a_i_n _n_a_m_e to any name without dots: djb@silverton -> djb@silverton.berkeley.edu It appends the _p_l_u_s _d_o_m_a_i_n _n_a_m_e 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 _s_o_u_r_c_e _r_o_u_t_e_s, but qqmmaaiill--iinnjjeecctt strips all source routes out of addresses. SSEENNDDEERR AADDDDRREESSSSEESS qqmmaaiill--iinnjjeecctt looks for sender address lists in the following fields: SSeennddeerr, FFrroomm, RReeppllyy--TToo, RReettuurrnn--PPaatthh, RReettuurrnn--RReecceeiipptt--TToo, EErrrroorrss--TToo, RReesseenntt--SSeennddeerr, RReesseenntt--FFrroomm, RReesseenntt--RReeppllyy--TToo. If there is no FFrroomm field, qqmmaaiill--iinnjjeecctt adds a new FFrroomm field with the name of the user invoking qqmmaaiill--iinnjjeecctt.. RFC 822 requires that certain sender fields contain only a single address, but qqmmaaiill--iinnjjeecctt does not enforce this restriction. RREECCIIPPIIEENNTT AADDDDRREESSSSEESS qqmmaaiill--iinnjjeecctt looks for recipient address lists in the following fields: TToo, CCcc, BBcccc, AAppppaarreennttllyy--TToo, RReesseenntt--TToo, RReesseenntt--CCcc, RReesseenntt--BBcccc. Every message must contain at least one TToo or CCcc or BBcccc. qqmmaaiill--iinnjjeecctt deletes any BBcccc field. If there is no TToo or CCcc field, qqmmaaiill--iinnjjeecctt adds a line Cc: recipient list not shown: ; This complies with RFC 822; it also works around some strange sseennddmmaaiill behavior, in case the message is passed through sseennddmmaaiill on another machine. SSTTAAMMPPSS Every message must contain a DDaattee field, with the date in a strict for- mat defined by RFC 822. If necessary qqmmaaiill--iinnjjeecctt creates a new DDaattee field with the current date (in GMT). Every message should contain a MMeessssaaggee--IIdd field. The field contents are a unique worldwide identifier for this message. If necessary qqmmaaiill--iinnjjeecctt creates a new MMeessssaaggee--IIdd field. Another important field is RReecceeiivveedd. Every time the message is sent from one system to another, a new RReecceeiivveedd field is added to the top of the message. qqmmaaiill--iinnjjeecctt does not create any RReecceeiivveedd fields. RREESSEENNTT MMEESSSSAAGGEESS A message is _r_e_s_e_n_t if it contains any of the following fields: RReesseenntt-- SSeennddeerr, RReesseenntt--FFrroomm, RReesseenntt--RReeppllyy--TToo, RReesseenntt--TToo, RReesseenntt--CCcc, RReesseenntt--BBcccc, RReesseenntt--DDaattee, RReesseenntt--MMeessssaaggee--IIDD. If a message is resent, qqmmaaiill--iinnjjeecctt changes its behavior as follows. It deletes any RReesseenntt--BBcccc field (as well as any BBcccc field); if there are no RReesseenntt--TToo or RReesseenntt--CCcc fields, qqmmaaiill--iinnjjeecctt adds an appropriate RReesseenntt--CCcc line. It does _n_o_t add a CCcc line, even if neither TToo nor CCcc is present. If there is no RReesseenntt--FFrroomm field, qqmmaaiill--iinnjjeecctt adds a new RReesseenntt--FFrroomm field. It does _n_o_t add a new FFrroomm field. qqmmaaiill--iinnjjeecctt adds RReesseenntt--DDaattee if one is not already present; same for RReesseenntt--MMeessssaaggee--IIdd. It does _n_o_t add new DDaattee or MMeessssaaggee--IIdd fields. OOTTHHEERR FFEEAATTUURREESS Addresses are separated by commas, not spaces. When qqmmaaiill--iinnjjeecctt sees an illegal space, it inserts a comma: djb fred -> djb, fred qqmmaaiill--iinnjjeecctt removes all RReettuurrnn--PPaatthh header fields. qqmmaaiill--iinnjjeecctt also removes any CCoonntteenntt--LLeennggtthh fields. SSEEEE AALLSSOO addresses(5), envelopes(5), qmail-inject(8) qmail-header(5)