summaryrefslogtreecommitdiff
path: root/initial_tagging.mdwn
blob: 44243e031a1651db7c5db0b818d2e49ccdc1b0d7 (plain)
[[!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.

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.

## 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.