DESCRIPTION
Normally the qmail-local program delivers each incoming message to your
system mailbox, homedir/Mailbox, where homedir is your home directory.
It can instead write the mail to a different file or directory, forward
it to another address, distribute it to a mailing list, or even execute
programs, all under your control.
THE QMAIL FILE
To change qmail-local's behavior, set up a .qmail file in your home
directory.
.qmail contains one or more lines. Each line is a delivery instruc-
tion. qmail-local follows each instruction in turn. There are five
types of delivery instructions: (1) comment; (2) program; (3) forward;
(4) mbox; (5) maildir.
(1) A comment line begins with a number sign:
# this is a comment
qmail-local ignores the line.
(2) A program line begins with a vertical bar:
|preline /usr/ucb/vacation djb
qmail-local takes the rest of the line as a command to supply to
sh. See qmail-command(8) for further information.
(3) A forward line begins with an ampersand:
&me@new.job.com
qmail-local takes the rest of the line as a mail address; it uses
qmail-queue to forward the message to that address. The address
must contain a fully qualified domain name; it must not contain
extra spaces, angle brackets, or comments:
# the following examples are WRONG
&me@new
&<me@new.job.com>
& me@new.job.com
&me@new.job.com (New Address)
If the address begins with a letter or number, you may leave out
the ampersand:
me@new.job.com
Note that qmail-local omits its new Return-Path line when forward-
ing messages.
If qmail-local is able to lock the file, but has trouble writing
to it (because, for example, the disk is full), it will truncate
the file back to its original length. However, it cannot prevent
mailbox corruption if the system crashes during delivery.
(5) A maildir line begins with a slash or dot, and ends with a slash:
/home/djb/Maildir/
qmail-local takes the entire line as the name of a directory in
maildir format. It reliably stores the incoming message in that
directory. See maildir(5) for more details.
If .qmail has the execute bit set, it must not contain any program
lines, mbox lines, or maildir lines. If qmail-local sees any such
lines, it will stop and indicate a temporary failure.
If .qmail is completely empty (0 bytes long), or does not exist, qmail-
local follows the defaultdelivery instructions set by your system
administrator; normally defaultdelivery is ./Mailbox, so qmail-local
appends the mail message to Mailbox in mbox format.
.qmail may contain extra spaces and tabs at the end of a line. Blank
lines are allowed, but not for the first line of .qmail.
If .qmail is world-writable or group-writable, qmail-local stops and
indicates a temporary failure.
SAFE QMAIL EDITING
Incoming messages can arrive at any moment. If you want to safely edit
your .qmail file, first set the sticky bit on your home directory:
chmod +t $/var/qmail
qmail-local will temporarily defer delivery of any message to you if
your home directory is sticky (or group-writable or other-writable,
which should never happen). Make sure to
chmod -t $/var/qmail
when you are done! It's a good idea to test your new .qmail file as
follows:
qmail-local -n $USER ~ $USER '' '' '' '' ./Mailbox
EXTENSION ADDRESSES
In the qmail system, you control all local addresses of the form user-
anything, as well as the address user itself, where user is your
account name. Delivery to user-anything is controlled by the file
homedir/.qmail-anything. (These rules may be changed by the system
files. For example, if ext is foo-bar, qmail-local will try first
.qmail-foo-bar, then .qmail-foo-default, and finally .qmail-default.
If none of these exist, qmail-local will bounce the message. (Excep-
tion: for the basic user address, qmail-local treats a nonexistent
.qmail the same as an empty .qmail.)
WARNING: For security, qmail-local replaces any dots in ext with colons
before checking .qmail-ext. For convenience, qmail-local converts any
uppercase letters in ext to lowercase.
When qmail-local forwards a message as instructed in .qmail-ext (or
.qmail-default), it checks whether .qmail-ext-owner exists. If so, it
uses local-owner@domain as the envelope sender for the forwarded mes-
sage. Otherwise it retains the envelope sender of the original mes-
sage. Exception: qmail-local always retains the original envelope
sender if it is the empty address or #@[], i.e., if this is a bounce
message.
qmail-local also supports variable envelope return paths (VERPs): if
.qmail-ext-owner and .qmail-ext-owner-default both exist, it uses
local-owner-@domain-@[] as the envelope sender. This will cause a
recipient recip@reciphost to see an envelope sender of
local-owner-recip=reciphost@domain.
ERROR HANDLING
If a delivery instruction fails, qmail-local stops immediately and
reports failure. qmail-local handles forwarding after all other
instructions, so any error in another type of delivery will prevent all
forwarding.
If a program returns exit code 99, qmail-local ignores all succeeding
lines in .qmail, but it still pays attention to previous forward lines.
To set up independent instructions, where a temporary or permanent
failure in one instruction does not affect the others, move each
instruction into a separate .qmail-ext file, and set up a central
.qmail file that forwards to all of the .qmail-exts. Note that qmail-
local can handle any number of forward lines simultaneously.
SEE ALSO
envelopes(5), maildir(5), mbox(5), qmail-users(5), qmail-local(8),
qmail-command(8), qmail-queue(8), qmail-lspawn(8)
5 s/qmail:(dot-qmail)
Man(1) output converted with
man2html