gnus: Maildir
6.4.13.5 Maildir
................
‘nnmaildir’ stores mail in the maildir format, with each maildir
corresponding to a group in Gnus. This format is documented here:
<http://cr.yp.to/proto/maildir.html> and here:
<http://www.qmail.org/man/man5/maildir.html>. ‘nnmaildir’ also stores
extra information in the ‘.nnmaildir/’ directory within a maildir.
Maildir format was designed to allow concurrent deliveries and
reading, without needing locks. With other back ends, you would have
your mail delivered to a spool of some kind, and then you would
configure Gnus to split mail from that spool into your groups. You can
still do that with ‘nnmaildir’, but the more common configuration is to
have your mail delivered directly to the maildirs that appear as group
in Gnus.
‘nnmaildir’ is designed to be perfectly reliable: ‘C-g’ will never
corrupt its data in memory, and ‘SIGKILL’ will never corrupt its data in
the filesystem.
‘nnmaildir’ stores article marks and NOV data in each maildir. So
you can copy a whole maildir from one Gnus setup to another, and you
will keep your marks.
Virtual server settings:
‘directory’
For each of your ‘nnmaildir’ servers (it’s very unlikely that you’d
need more than one), you need to create a directory and populate it
with maildirs or symlinks to maildirs (and nothing else; do not
choose a directory already used for other purposes). Each maildir
will be represented in Gnus as a newsgroup on that server; the
filename of the symlink will be the name of the group. Any
filenames in the directory starting with ‘.’ are ignored. The
directory is scanned when you first start Gnus, and each time you
type ‘g’ in the group buffer; if any maildirs have been removed or
added, ‘nnmaildir’ notices at these times.
The value of the ‘directory’ parameter should be a Lisp form which
is processed by ‘eval’ and ‘expand-file-name’ to get the path of
the directory for this server. The form is ‘eval’ed only when the
server is opened; the resulting string is used until the server is
closed. (If you don’t know about forms and ‘eval’, don’t worry—a
simple string will work.) This parameter is not optional; you must
specify it. I don’t recommend using ‘"~/Mail"’ or a subdirectory
of it; several other parts of Gnus use that directory by default
for various things, and may get confused if ‘nnmaildir’ uses it
too. ‘"~/.nnmaildir"’ is a typical value.
‘target-prefix’
This should be a Lisp form which is processed by ‘eval’ and
‘expand-file-name’. The form is ‘eval’ed only when the server is
opened; the resulting string is used until the server is closed.
When you create a group on an ‘nnmaildir’ server, the maildir is
created with ‘target-prefix’ prepended to its name, and a symlink
pointing to that maildir is created, named with the plain group
name. So if ‘directory’ is ‘"~/.nnmaildir"’ and ‘target-prefix’ is
‘"../maildirs/"’, then when you create the group ‘foo’, ‘nnmaildir’
will create ‘~/.nnmaildir/../maildirs/foo’ as a maildir, and will
create ‘~/.nnmaildir/foo’ as a symlink pointing to
‘../maildirs/foo’.
You can set ‘target-prefix’ to a string without any slashes to
create both maildirs and symlinks in the same ‘directory’; in this
case, any maildirs found in ‘directory’ whose names start with
‘target-prefix’ will not be listed as groups (but the symlinks
pointing to them will be).
As a special case, if ‘target-prefix’ is ‘""’ (the default), then
when you create a group, the maildir will be created in ‘directory’
without a corresponding symlink. Beware that you cannot use
‘gnus-group-delete-group’ on such groups without the ‘force’
argument.
‘directory-files’
This should be a function with the same interface as
‘directory-files’ (such as ‘directory-files’ itself). It is used
to scan the server’s ‘directory’ for maildirs. This parameter is
optional; the default is ‘nnheader-directory-files-safe’ if
‘nnheader-directory-files-is-safe’ is ‘nil’, and ‘directory-files’
otherwise. (‘nnheader-directory-files-is-safe’ is checked only
once when the server is opened; if you want to check it each time
the directory is scanned, you’ll have to provide your own function
that does that.)
‘get-new-mail’
If non-‘nil’, then after scanning for new mail in the group
maildirs themselves as usual, this server will also incorporate
mail the conventional Gnus way, from ‘mail-sources’ according to
‘nnmail-split-methods’ or ‘nnmail-split-fancy’. The default value
is ‘nil’.
Do _not_ use the same maildir both in ‘mail-sources’ and as an
‘nnmaildir’ group. The results might happen to be useful, but that
would be by chance, not by design, and the results might be
different in the future. If your split rules create new groups,
remember to supply a ‘create-directory’ server parameter.