If you subscribe to dozens of mailing lists but you don’t want to
maintain mail splitting rules manually, group mail splitting is for you.
You just have to set to-list
and/or to-address
in group
parameters or group customization and set nnmail-split-methods
to
gnus-group-split
. This splitting function will scan all groups
for those parameters and split mail accordingly, i.e., messages posted
from or to the addresses specified in the parameters to-list
or
to-address
of a mail group will be stored in that group.
Sometimes, mailing lists have multiple addresses, and you may want mail
splitting to recognize them all: just set the extra-aliases
group
parameter to the list of additional addresses and it’s done. If you’d
rather use a regular expression, set split-regexp
.
All these parameters in a group will be used to create an
nnmail-split-fancy
split, in which the field is ‘any’,
the value is a single regular expression that matches
to-list
, to-address
, all of extra-aliases
and all
matches of split-regexp
, and the split is the name of the
group. restricts are also supported: just set the
split-exclude
parameter to a list of regular expressions.
If you can’t get the right split to be generated using all these
parameters, or you just need something fancier, you can set the
parameter split-spec
to an nnmail-split-fancy
split. In
this case, all other aforementioned parameters will be ignored by
gnus-group-split
. In particular, split-spec
may be set to
nil
, in which case the group will be ignored by
gnus-group-split
.
gnus-group-split
will do cross-posting on all groups that match,
by defining a single &
fancy split containing one split for each
group. If a message doesn’t match any split, it will be stored in the
group named in gnus-group-split-default-catch-all-group
, unless
some group has split-spec
set to catch-all
, in which case
that group is used as the catch-all group. Even though this variable is
often used just to name a group, it may also be set to an arbitrarily
complex fancy split (after all, a group name is a fancy split), and this
may be useful to split mail that doesn’t go to any mailing list to
personal mail folders. Note that this fancy split is added as the last
element of a |
split list that also contains a &
split
with the rules extracted from group parameters.
It’s time for an example. Assume the following group parameters have been defined:
nnml:mail.bar: ((to-address . "bar@femail.com") (split-regexp . ".*@femail\\.com")) nnml:mail.foo: ((to-list . "foo@nowhere.gov") (extra-aliases "foo@localhost" "foo-redist@home") (split-exclude "bugs-foo" "rambling-foo") (admin-address . "foo-request@nowhere.gov")) nnml:mail.others: ((split-spec . catch-all))
Setting nnmail-split-methods
to gnus-group-split
will
behave as if nnmail-split-fancy
had been selected and variable
nnmail-split-fancy
had been set as follows:
(| (& (any "\\(bar@femail\\.com\\|.*@femail\\.com\\)" "mail.bar") (any "\\(foo@nowhere\\.gov\\|foo@localhost\\|foo-redist@home\\)" - "bugs-foo" - "rambling-foo" "mail.foo")) "mail.others")
If you’d rather not use group splitting for all your mail groups, you
may use it for only some of them, by using nnmail-split-fancy
splits like this:
(: gnus-group-split-fancy groups no-crosspost catch-all)
groups may be a regular expression or a list of group names whose
parameters will be scanned to generate the output split.
no-crosspost can be used to disable cross-posting; in this case, a
single |
split will be output. catch-all is the fall back
fancy split, used like gnus-group-split-default-catch-all-group
.
If catch-all is nil
, or if split-regexp
matches the
empty string in any selected group, no catch-all split will be issued.
Otherwise, if some group has split-spec
set to catch-all
,
this group will override the value of the catch-all argument.
Unfortunately, scanning all groups and their parameters can be quite
slow, especially considering that it has to be done for every message.
But don’t despair! The function gnus-group-split-setup
can be
used to enable gnus-group-split
in a much more efficient way. It
sets nnmail-split-methods
to nnmail-split-fancy
and sets
nnmail-split-fancy
to the split produced by
gnus-group-split-fancy
. Thus, the group parameters are only
scanned once, no matter how many messages are split.
However, if you change group parameters, you’d have to update
nnmail-split-fancy
manually. You can do it by running
gnus-group-split-update
. If you’d rather have it updated
automatically, just tell gnus-group-split-setup
to do it for
you. For example, add to your ~/.gnus.el:
(gnus-group-split-setup auto-update catch-all)
If auto-update is non-nil
, gnus-group-split-update
will be added to gnus-get-top-new-news-hook
, so you won’t ever
have to worry about updating nnmail-split-fancy
again. If you
don’t omit catch-all (it’s optional, equivalent to nil
),
gnus-group-split-default-catch-all-group
will be set to its
value.
Because you may want to change nnmail-split-fancy
after it is set
by gnus-group-split-update
, this function will run
gnus-group-split-updated-hook
just before finishing.