[[!img notmuch-logo.png alt="Notmuch logo" class="left"]]
This page collects scripts and strategies for organizing mail using notmuch and doing automated initial tagging.
The [new]
config section allows you to control which tags new messages
receive. By default, notmuch config
will use the tags inbox and unread.
If maildir.synchronize_flags
is true (which is the default), Maildir flags
have precedence over the initial tags. Thus an already read mail gets its
initial unread tag correctly removed.
Here's another very general and ad-hoc approach to initial message tagging, which sets all new messages to get the new tag:
[new]
tags=new;
After running notmuch new
, all new messages will be marked new.
You can then do various tag post-processing by just acting on messages
with that tag. For instance, a post-processing script might do the
following:
# immediately archive all messages from "me"
notmuch tag -new -- tag:new and from:[email protected]
# delete all messages from a spammer:
notmuch tag +deleted -- tag:new and from:[email protected]
# tag all message from notmuch mailing list
notmuch tag +notmuch -- tag:new and to:[email protected]
# finally, retag all "new" messages "inbox" and "unread"
notmuch tag +inbox +unread -new -- tag:new
Note that the command above will mark a new but already-read mail as unread.
Since the post-processing is only acting on a few messages, it is generally extremely fast.
You can use the post-new
hook, which is automatically run after notmuch new
,
to do post-processing. See man notmuch-hooks
for details on hooks.
Since notmuch currently does not index arbitrary headers, it can be useful to tag based on content. Here is a snippet that would fit with the 'new' tag approach discussed above.
for mid in $(notmuch search --output=messages tag:new); do
if notmuch show --format=raw "$mid" 2>/dev/null | awk '!NF{exit 1} /^X-Spam_bar: \+\+\+\+\+\+\+\+/ {exit 0}'; then
notmuch tag +spam "$mid"
fi
done
-
Carl Worth's approach to tagging. It is email id:[email protected] in the notmuch mailing list archives.
-
One user's setup (id:[email protected]), which includes using the inbox tag as a "new mail" flag.
-
Another user's setup (id:"[email protected]"), which uses a dedicated tag for marking new mail, which is then sorted with a python script using Bogofilter for spam detection. This is generally a great deal faster than a shell-scripted approach. This approach introduces a workflow built around a "watch" tag. Here, the user is only presented with threads as they are started. At this point the user can choose to watch the thread, in which case future messages will be tagged with "inbox", or ignore it. This provides an excellent means for dealing with a large flux of messages with a low signal-to-noise.
-
afew is an initial tagging solution that should work out of the box for most basic tagging needs (mailinglist handling, killed thread handling, autoarchiving of sent mails).
-
p6-notmuch-filter a initial tagging script that read its configuration from a JSON file. The script is written in Perl6 and depends on the Email::Notmuch binding.
-
lieer Fast email-fetching and two-way tag synchronization between notmuch and GMail.
The notmuch insert command is a tool for delivering emails to maildir, indexing them to the Notmuch database, and tagging them as desired.