-# Initial Tagging
+[[!img notmuch-logo.png alt="Notmuch logo" class="left"]]
+# Approaches to initial tagging of messages
This page collects scripts and strategies for organizing mail using
notmuch and doing automated initial tagging.
-* [This
- email](http://notmuchmail.org/pipermail/notmuch/2010/001691.html)
- (and related thread) details Carl Worth's approach to tagging. It is
- email id:87r5o8stbj.fsf@yoom.home.cworth.org in the notmuch mailing
- list archives.
+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.
-* [This
- email](http://notmuchmail.org/pipermail/notmuch/2010/001690.html)
- (and related thread) details one user's setup, which includes using
- the inbox tag as a "new mail" flag. It is email
- id:87hbp5j9dv.fsf@hackervisions.org in the notmuch mailing list
- archives.
+## The *new* tag approach
+
+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:me@example.com
+
+ # delete all messages from a spammer:
+ notmuch tag +deleted -- tag:new and from:spam@spam.com
+
+ # tag all message from notmuch mailing list
+ notmuch tag +notmuch -- tag:new and to:notmuch@notmuchmail.org
+
+ # 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.
+
+## Tagging based on content
+
+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
+
+
+## Other solutions
+
+* [Carl Worth's approach to tagging](https://notmuchmail.org/pipermail/notmuch/2010/001691.html). It
+ is email id:87r5o8stbj.fsf@yoom.home.cworth.org in the notmuch
+ mailing list archives.
+
+
+* [One user's setup](https://notmuchmail.org/pipermail/notmuch/2010/001690.html)
+ (id:87hbp5j9dv.fsf@hackervisions.org), which includes using the
+ inbox tag as a "new mail" flag.
+
+* [Another user's setup](https://notmuchmail.org/pipermail/notmuch/2011/003976.html)
+ (id:"87tyfu3k5a.fsf@gmail.com"), 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](https://github.com/afewmail/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](https://github.com/goneri/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](https://github.com/gauteh/lieer) Fast email-fetching and two-way tag synchronization between notmuch and GMail.
+
+## Notmuch MDA -- `notmuch-insert`
+
+The [notmuch insert command](https://notmuchmail.org/doc/latest/man1/notmuch-insert.html) is a tool for
+delivering emails to maildir, indexing them to the Notmuch database, and tagging
+them as desired.