Commit | Line | Data |
---|---|---|
2117e02e MW |
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 | ||
212b6f5d MW |
14 | For more detailed information, see |
15 | .BR http://pobox.com/~djb/proto/immhf.html . | |
2117e02e MW |
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 | |
212b6f5d | 243 | .I resent |
2117e02e MW |
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 | ||
212b6f5d | 254 | If a message is resent, |
2117e02e MW |
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) |