|
0
|
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)
|