|
1 .TH qmail-header 5 |
|
2 .SH NAME |
|
3 qmail-header \- format of a mail message |
|
4 .SH OVERVIEW |
|
5 At the top of every mail message is a |
|
6 highly structured |
|
7 .BR header . |
|
8 Many programs expect the header to carry certain information, |
|
9 as described below. |
|
10 The main function of |
|
11 .B qmail-inject |
|
12 is to make sure that each outgoing message has an appropriate header. |
|
13 |
|
14 For more detailed information, see |
|
15 .BR http://pobox.com/~djb/proto/immhf.html . |
|
16 .SH "MESSAGE STRUCTURE" |
|
17 A message contains a series of |
|
18 .I header fields\fR, |
|
19 a blank line, |
|
20 and a |
|
21 .IR body : |
|
22 |
|
23 .EX |
|
24 Received: (qmail-queue invoked by uid 666); |
|
25 .br |
|
26 30 Jul 1996 11:54:54 -0000 |
|
27 .br |
|
28 From: djb@silverton.berkeley.edu (D. J. Bernstein) |
|
29 .br |
|
30 To: fred@silverton.berkeley.edu |
|
31 .br |
|
32 Date: 30 Jul 1996 11:54:54 -0000 |
|
33 .br |
|
34 Subject: Go, Bears! |
|
35 .br |
|
36 |
|
37 .br |
|
38 I've got money on this one. How about you? |
|
39 .br |
|
40 |
|
41 .br |
|
42 ---Dan (this is the third line of the body) |
|
43 .EE |
|
44 |
|
45 Each header field has a |
|
46 .IR name , |
|
47 a colon, |
|
48 some |
|
49 .IR contents , |
|
50 and a newline: |
|
51 |
|
52 .EX |
|
53 Subject: Go, Bears! |
|
54 .EE |
|
55 |
|
56 The field contents may be folded across several lines. |
|
57 Each line past the first must begin with a space or tab: |
|
58 |
|
59 .EX |
|
60 Received: (qmail-queue invoked by uid 666); |
|
61 .br |
|
62 30 Jul 1996 11:54:54 -0000 |
|
63 .EE |
|
64 |
|
65 The field name must not contain spaces, tabs, or colons. |
|
66 Also, an empty field name is illegal. |
|
67 .B qmail-inject |
|
68 does not allow field names with unprintable characters. |
|
69 |
|
70 Case is irrelevant in field names: |
|
71 .B subject |
|
72 and |
|
73 .B SUBJECT |
|
74 and |
|
75 .B SuBjEcT |
|
76 have the same meaning. |
|
77 .SH "ADDRESS LISTS" |
|
78 Certain fields, such as |
|
79 .BR To , |
|
80 contain |
|
81 .I address lists\fR. |
|
82 |
|
83 An address list contains some number of |
|
84 .I addresses |
|
85 or |
|
86 .I address groups\fR, |
|
87 separated by commas: |
|
88 |
|
89 .EX |
|
90 a@b, c@d (Somebody), A Person <e@f>, |
|
91 .br |
|
92 random group: g@h, i@j;, k@l |
|
93 .EE |
|
94 |
|
95 An |
|
96 .I address group |
|
97 has some text, a colon, a list of addresses, |
|
98 and a semicolon: |
|
99 |
|
100 .EX |
|
101 random group: g@h, i@j; |
|
102 .EE |
|
103 |
|
104 An address can appear in several forms. |
|
105 The most common form is |
|
106 .IR box@host . |
|
107 |
|
108 Every address must include a host name. |
|
109 If |
|
110 .B qmail-inject |
|
111 sees a lone box name |
|
112 it adds the |
|
113 .I default host name\fR. |
|
114 |
|
115 All host names should be fully qualified. |
|
116 .B qmail-inject |
|
117 appends the |
|
118 .I default domain name |
|
119 to any name without dots: |
|
120 |
|
121 .EX |
|
122 djb@silverton -> djb@silverton.berkeley.edu |
|
123 .EE |
|
124 |
|
125 It appends the |
|
126 .I plus domain name |
|
127 to any name |
|
128 that ends with a plus sign: |
|
129 |
|
130 .EX |
|
131 eric@mammoth.cs+ -> eric@mammoth.cs.berkeley.edu |
|
132 .EE |
|
133 |
|
134 A host name may be a dotted-decimal address: |
|
135 |
|
136 .EX |
|
137 djb@[128.32.183.163] |
|
138 .EE |
|
139 |
|
140 RFC 822 allows mailbox names inside angle brackets |
|
141 to include |
|
142 .I source routes\fR, |
|
143 but |
|
144 .B qmail-inject |
|
145 strips all source routes out of addresses. |
|
146 .SH "SENDER ADDRESSES" |
|
147 .B qmail-inject |
|
148 looks for sender address lists in the following fields: |
|
149 .BR Sender , |
|
150 .BR From , |
|
151 .BR Reply-To , |
|
152 .BR Return-Path , |
|
153 .BR Return-Receipt-To , |
|
154 .BR Errors-To , |
|
155 .BR Resent-Sender , |
|
156 .BR Resent-From , |
|
157 .BR Resent-Reply-To . |
|
158 |
|
159 If there is no |
|
160 .B From |
|
161 field, |
|
162 .B qmail-inject |
|
163 adds a new |
|
164 .B From |
|
165 field with the name of the user invoking |
|
166 .B qmail-inject. |
|
167 |
|
168 RFC 822 requires that certain sender fields contain |
|
169 only a single address, but |
|
170 .B qmail-inject |
|
171 does not enforce this restriction. |
|
172 .SH "RECIPIENT ADDRESSES" |
|
173 .B qmail-inject |
|
174 looks for recipient address lists in the following fields: |
|
175 .BR To , |
|
176 .BR Cc , |
|
177 .BR Bcc , |
|
178 .BR Apparently-To , |
|
179 .BR Resent-To , |
|
180 .BR Resent-Cc , |
|
181 .BR Resent-Bcc . |
|
182 |
|
183 Every message must contain at least one |
|
184 .B To |
|
185 or |
|
186 .B Cc |
|
187 or |
|
188 .BR Bcc . |
|
189 .B qmail-inject |
|
190 deletes any |
|
191 .B Bcc |
|
192 field. |
|
193 If there is no |
|
194 .B To |
|
195 or |
|
196 .B Cc |
|
197 field, |
|
198 .B qmail-inject |
|
199 adds a line |
|
200 |
|
201 .EX |
|
202 Cc: recipient list not shown: ; |
|
203 .EE |
|
204 |
|
205 This complies with RFC 822; |
|
206 it also works around some strange |
|
207 .B sendmail |
|
208 behavior, in case the message is passed through |
|
209 .B sendmail |
|
210 on another machine. |
|
211 .SH STAMPS |
|
212 Every message must contain a |
|
213 .B Date |
|
214 field, with the date in a strict format defined by RFC 822. |
|
215 If necessary |
|
216 .B qmail-inject |
|
217 creates a new |
|
218 .B Date |
|
219 field with the current date (in GMT). |
|
220 |
|
221 Every message should contain a |
|
222 .B Message-Id |
|
223 field. |
|
224 The field contents are a unique worldwide identifier for this message. |
|
225 If necessary |
|
226 .B qmail-inject |
|
227 creates a new |
|
228 .B Message-Id |
|
229 field. |
|
230 |
|
231 Another important field is |
|
232 .BR Received . |
|
233 Every time the message is sent from one system to another, |
|
234 a new |
|
235 .B Received |
|
236 field is added to the top of the message. |
|
237 .B qmail-inject |
|
238 does not create any |
|
239 .B Received |
|
240 fields. |
|
241 .SH "RESENT MESSAGES" |
|
242 A message is |
|
243 .I resent |
|
244 if it contains any of the following fields: |
|
245 .BR Resent-Sender , |
|
246 .BR Resent-From , |
|
247 .BR Resent-Reply-To , |
|
248 .BR Resent-To , |
|
249 .BR Resent-Cc , |
|
250 .BR Resent-Bcc , |
|
251 .BR Resent-Date , |
|
252 .BR Resent-Message-ID . |
|
253 |
|
254 If a message is resent, |
|
255 .B qmail-inject |
|
256 changes its behavior as follows. |
|
257 |
|
258 It deletes any |
|
259 .B Resent-Bcc |
|
260 field (as well as any |
|
261 .B Bcc |
|
262 field); |
|
263 if there are no |
|
264 .B Resent-To |
|
265 or |
|
266 .B Resent-Cc |
|
267 fields, |
|
268 .B qmail-inject |
|
269 adds an appropriate |
|
270 .B Resent-Cc |
|
271 line. |
|
272 It does |
|
273 .I not |
|
274 add a |
|
275 .B Cc |
|
276 line, |
|
277 even if neither |
|
278 .B To |
|
279 nor |
|
280 .B Cc |
|
281 is present. |
|
282 |
|
283 If there is no |
|
284 .B Resent-From |
|
285 field, |
|
286 .B qmail-inject |
|
287 adds a new |
|
288 .B Resent-From |
|
289 field. |
|
290 It does |
|
291 .I not |
|
292 add a new |
|
293 .B From |
|
294 field. |
|
295 |
|
296 .B qmail-inject |
|
297 adds |
|
298 .B Resent-Date |
|
299 if one is not already present; |
|
300 same for |
|
301 .BR Resent-Message-Id . |
|
302 It does |
|
303 .I not |
|
304 add new |
|
305 .B Date |
|
306 or |
|
307 .B Message-Id |
|
308 fields. |
|
309 .SH "OTHER FEATURES" |
|
310 Addresses are separated by commas, not spaces. |
|
311 When |
|
312 .B qmail-inject |
|
313 sees an illegal space, |
|
314 it inserts a comma: |
|
315 |
|
316 .EX |
|
317 djb fred -> djb, fred |
|
318 .EE |
|
319 |
|
320 .B qmail-inject |
|
321 removes all |
|
322 .B Return-Path |
|
323 header fields. |
|
324 |
|
325 .B qmail-inject |
|
326 also removes any |
|
327 .B Content-Length |
|
328 fields. |
|
329 .SH "SEE ALSO" |
|
330 addresses(5), |
|
331 envelopes(5), |
|
332 qmail-inject(8) |