chiark / gitweb /
Merge branches 'idx/verh' and 'idx/qmqpc'
[qmail] / dot-qmail.9
1 .TH dot-qmail 5
2 .SH NAME
3 dot-qmail \- control the delivery of mail messages
4 .SH DESCRIPTION
5 Normally the
6 .B qmail-local
7 program delivers each incoming message to your system mailbox,
8 .IR homedir\fB/Mailbox ,
9 where
10 .I homedir
11 is your home directory.
12
13 It can instead
14 write the mail to a different file or directory,
15 forward it to another address,
16 distribute it to a mailing list,
17 or even execute programs,
18 all under your control.
19 .SH "THE QMAIL FILE"
20 To change
21 .BR qmail-local 's
22 behavior, set up a
23 .B .qmail
24 file in your home directory.
25
26 .B .qmail
27 contains one or more lines.
28 Each line is a delivery instruction.
29 .B qmail-local
30 follows each instruction in turn.
31 There are five types of delivery instructions:
32 (1) comment; (2) program; (3) forward; (4) mbox; (5) maildir.
33 .TP 5
34 (1)
35 A comment line begins with a number sign:
36
37 .EX
38      # this is a comment
39 .EE
40
41 .B qmail-local
42 ignores the line.
43 .TP 5
44 (2)
45 A program line begins with a vertical bar:
46
47 .EX
48      |preline /usr/ucb/vacation djb
49 .EE
50
51 .B qmail-local
52 takes the rest of the line as a command to supply to
53 .BR sh .
54 See
55 .B qmail-command(8)
56 for further information.
57 .TP 5
58 (3)
59 A forward line begins with an ampersand:
60
61 .EX
62      &me@new.job.com
63 .EE
64
65 .B qmail-local
66 takes the rest of the line as a mail address;
67 it uses
68 .B qmail-queue
69 to forward the message to that address.
70 The address must contain a fully qualified domain name;
71 it must not contain extra spaces, angle brackets, or comments:
72
73 .EX
74      # the following examples are WRONG
75 .br
76      &me@new
77 .br
78      &<me@new.job.com>
79 .br
80      & me@new.job.com
81 .br
82      &me@new.job.com (New Address)
83 .EE
84
85 If the address begins with a letter or number,
86 you may leave out the ampersand:
87
88 .EX
89      me@new.job.com
90 .EE
91
92 Note that
93 .B qmail-local
94 omits its new
95 .B Return-Path
96 line when forwarding messages.
97 .TP 5
98 (4)
99 An 
100 .I mbox
101 line begins with a slash or dot,
102 and does not end with a slash:
103
104 .EX
105      /home/djb/Mailbox.sos
106 .EE
107
108 .B qmail-local
109 takes the entire line as a filename.
110 It appends the mail message to that file,
111 using
112 .BR flock -style
113 file locking if possible.
114 .B qmail-local
115 stores the mail message in
116 .I mbox
117 format, as described in
118 .BR mbox(5) .
119
120 .B WARNING:
121 On many systems,
122 anyone who can read a file can
123 .B flock
124 it, and thus hold up
125 .BR qmail-local 's
126 delivery forever.
127 Do not deliver mail to a publicly accessible file!
128
129 If
130 .B qmail-local
131 is able to lock the file, but has trouble writing to it
132 (because, for example, the disk is full),
133 it will truncate the file back to its original length.
134 However, it cannot prevent mailbox corruption if the system
135 crashes during delivery.
136 .TP 5
137 (5)
138 A
139 .I maildir
140 line begins with a slash or dot,
141 and ends with a slash:
142
143 .EX
144      /home/djb/Maildir/
145 .EE
146
147 .B qmail-local
148 takes the entire line as the name of a directory in
149 .I maildir
150 format.
151 It reliably stores the incoming message in that directory.
152 See
153 .B maildir(5)
154 for more details.
155 .PP
156 If
157 .B .qmail
158 has the execute bit set,
159 it must not contain any
160 program lines,
161 .I mbox
162 lines,
163 or
164 .I maildir
165 lines.
166 If
167 .B qmail-local
168 sees any such lines,
169 it will stop and indicate a temporary failure.
170
171 If
172 .B .qmail
173 is completely empty (0 bytes long), or does not exist,
174 .B qmail-local
175 follows the
176 .I defaultdelivery
177 instructions set by your system administrator;
178 normally
179 .I defaultdelivery
180 is
181 .BR ./Mailbox ,
182 so
183 .B qmail-local
184 appends the mail message to
185 .B Mailbox
186 in
187 .I mbox
188 format.
189
190 .B .qmail
191 may contain extra spaces and tabs at the end of a line.
192 Blank lines are allowed, but not for the first line of
193 .BR .qmail .
194
195 If
196 .B .qmail
197 is world-writable or group-writable,
198 .B qmail-local
199 stops and indicates a temporary failure.
200 .SH "SAFE QMAIL EDITING"
201 Incoming messages can arrive at any moment.
202 If you want to safely edit your
203 .B .qmail
204 file, first set the sticky bit on your home directory:
205
206 .EX
207      chmod +t $HOME
208 .EE
209
210 .B qmail-local
211 will temporarily defer delivery of any message to you
212 if your home directory is sticky
213 (or group-writable or other-writable,
214 which should never happen).
215 Make sure to
216
217 .EX
218      chmod -t $HOME
219 .EE
220
221 when you are done!
222 It's a good idea to test your new
223 .B .qmail
224 file as follows:
225
226 .EX
227      qmail-local -n $USER ~ $USER '' '' '' '' ./Mailbox
228 .EE
229 .SH "EXTENSION ADDRESSES"
230 In the
231 .B qmail
232 system,
233 you control all local addresses of the form
234 .IR user\fBBREAK\fIanything ,
235 as well as the address
236 .I user
237 itself,
238 where
239 .I user
240 is your account name.
241 Delivery to
242 .I user\fBBREAK\fIanything
243 is controlled by the file
244 .IR homedir/\fB.qmail\-\fIanything .
245 (These rules may be changed by the system administrator;
246 see
247 .BR qmail-users (5).)
248
249 The
250 .B alias
251 user controls all other addresses.
252 Delivery to
253 .I local
254 is controlled by the file
255 .IR homedir/\fB.qmail\-\fIlocal ,
256 where
257 .I homedir
258 is
259 .BR alias 's
260 home directory.
261
262 In the following description,
263 .B qmail-local
264 is handling a message addressed to
265 .IR local@domain ,
266 where
267 .I local
268 is controlled by
269 .BR .qmail\-\fIext .
270 Here is what it does.
271
272 If
273 .B .qmail\-\fIext
274 is completely empty,
275 .B qmail-local
276 follows the
277 .I defaultdelivery
278 instructions set by your system administrator.
279
280 If
281 .B .qmail\-\fIext
282 doesn't exist,
283 .B qmail-local
284 will try some default
285 .B .qmail
286 files.
287 For example,
288 if
289 .I ext
290 is
291 .BR foo-bar ,
292 .B qmail-local
293 will try first
294 .BR .qmail-foo-bar ,
295 then
296 .BR .qmail-foo-default ,
297 and finally
298 .BR .qmail-default .
299 If none of these exist,
300 .B qmail-local
301 will bounce the message.
302 (Exception: for the basic
303 .I user
304 address,
305 .B qmail-local
306 treats a nonexistent
307 .B .qmail
308 the same as an empty
309 .BR .qmail .)
310
311 .B WARNING:
312 For security,
313 .B qmail-local
314 replaces any dots in
315 .I ext
316 with colons before checking
317 .BR .qmail\-\fIext .
318 For convenience,
319 .B qmail-local
320 converts any uppercase letters in
321 .I ext
322 to lowercase.
323
324 When
325 .B qmail-local
326 forwards a message as instructed in
327 .B .qmail\-\fIext
328 (or
329 .BR .qmail-default ),
330 it checks whether
331 .B .qmail\-\fIext\fB-owner\fP
332 exists.
333 If so,
334 it uses
335 .I local\fB-owner@\fIdomain
336 as the envelope sender for the forwarded message.
337 Otherwise it retains the envelope sender of the original message.
338 Exception:
339 .B qmail-local
340 always retains the original envelope sender
341 if it is the empty address or
342 .BR #@[] ,
343 i.e., if this is a bounce message.
344
345 .B qmail-local
346 also supports
347 .B variable envelope return paths
348 (VERPs):
349 if
350 .B .qmail\-\fIext\fB-owner\fP
351 and
352 .B .qmail\-\fIext\fB-owner-default\fP
353 both exist, it uses
354 .I local\fB\-owner\-@\fIdomain\fB-@[]
355 as the envelope sender.
356 This will cause a recipient
357 .I recip\fB@\fIreciphost
358 to see an envelope sender of
359 .IR local\fB\-owner\-\fIrecip\fB=\fIreciphost\fB@\fIdomain .
360 .SH "ERROR HANDLING"
361 If a delivery instruction fails,
362 .B qmail-local
363 stops immediately and reports failure.
364 .B qmail-local
365 handles forwarding after all other instructions,
366 so any error in another type of delivery will prevent all forwarding.
367
368 If a program returns exit code 99,
369 .B qmail-local
370 ignores all succeeding lines in
371 .BR .qmail ,
372 but it still pays attention to previous forward lines.
373
374 To set up independent instructions,
375 where a temporary or permanent failure in one instruction
376 does not affect the others,
377 move each instruction into a separate
378 .B .qmail\-\fIext
379 file, and set up a central
380 .B .qmail
381 file that forwards to all of the
382 .BR .qmail\-\fIext s.
383 Note that
384 .B qmail-local
385 can handle any number of forward lines simultaneously.
386 .SH "SEE ALSO"
387 envelopes(5),
388 maildir(5),
389 mbox(5),
390 qmail-users(5),
391 qmail-local(8),
392 qmail-command(8),
393 qmail-queue(8),
394 qmail-lspawn(8)