mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-23 03:18:08 +01:00
941cb03e57
These changes were included in Thomas's restore --accumulate patch, but are actually more generally applicable.
688 lines
20 KiB
Groff
688 lines
20 KiB
Groff
.\" notmuch - Not much of an email program, (just index, search and tagging)
|
|
.\"
|
|
.\" Copyright © 2009 Carl Worth
|
|
.\"
|
|
.\" Notmuch is free software: you can redistribute it and/or modify
|
|
.\" it under the terms of the GNU General Public License as published by
|
|
.\" the Free Software Foundation, either version 3 of the License, or
|
|
.\" (at your option) any later version.
|
|
.\"
|
|
.\" Notmuch is distributed in the hope that it will be useful,
|
|
.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
.\" GNU General Public License for more details.
|
|
.\"
|
|
.\" You should have received a copy of the GNU General Public License
|
|
.\" along with this program. If not, see http://www.gnu.org/licenses/ .
|
|
.\"
|
|
.\" Author: Carl Worth <cworth@cworth.org>
|
|
.TH NOTMUCH 1 2009-10-31 "Notmuch 0.1"
|
|
.SH NAME
|
|
notmuch \- thread-based email index, search, and tagging
|
|
.SH SYNOPSIS
|
|
.B notmuch
|
|
.IR command " [" args " ...]"
|
|
.SH DESCRIPTION
|
|
Notmuch is a command-line based program for indexing, searching,
|
|
reading, and tagging large collections of email messages.
|
|
|
|
The quickest way to get started with Notmuch is to simply invoke the
|
|
.B notmuch
|
|
command with no arguments, which will interactively guide you through
|
|
the process of indexing your mail.
|
|
.SH NOTE
|
|
While the command-line program
|
|
.B notmuch
|
|
provides powerful functionality, it does not provide the most
|
|
convenient interface for that functionality. More sophisticated
|
|
interfaces are expected to be built on top of either the command-line
|
|
interface, or more likely, on top of the notmuch library
|
|
interface. See http://notmuchmail.org for more about alternate
|
|
interfaces to notmuch.
|
|
.SH COMMANDS
|
|
The
|
|
.BR setup
|
|
command is used to configure Notmuch for first use, (or to reconfigure
|
|
it later).
|
|
.RS 4
|
|
.TP 4
|
|
.B setup
|
|
|
|
Interactively sets up notmuch for first use.
|
|
|
|
The setup command will prompt for your full name, your primary email
|
|
address, any alternate email addresses you use, and the directory
|
|
containing your email archives. Your answers will be written to a
|
|
configuration file in ${NOTMUCH_CONFIG} (if set) or
|
|
${HOME}/.notmuch-config . This configuration file will be created with
|
|
descriptive comments, making it easy to edit by hand later to change the
|
|
configuration. Or you can run
|
|
.B "notmuch setup"
|
|
again to change the configuration.
|
|
|
|
The mail directory you specify can contain any number of
|
|
sub-directories and should primarily contain only files with individual
|
|
email messages (eg. maildir or mh archives are perfect). If there are
|
|
other, non-email files (such as indexes maintained by other email
|
|
programs) then notmuch will do its best to detect those and ignore
|
|
them.
|
|
|
|
Mail storage that uses mbox format, (where one mbox file contains many
|
|
messages), will not work with notmuch. If that's how your mail is
|
|
currently stored, it is recommended you first convert it to maildir
|
|
format with a utility such as mb2md before running
|
|
.B "notmuch setup" .
|
|
|
|
Invoking
|
|
.B notmuch
|
|
with no command argument will run
|
|
.B setup
|
|
if the setup command has not previously been completed.
|
|
.RE
|
|
|
|
The
|
|
.B new
|
|
command is used to incorporate new mail into the notmuch database.
|
|
.RS 4
|
|
.TP 4
|
|
.B new
|
|
|
|
Find and import any new messages to the database.
|
|
|
|
The
|
|
.B new
|
|
command scans all sub-directories of the database, performing
|
|
full-text indexing on new messages that are found. Each new message
|
|
will automatically be tagged with both the
|
|
.BR inbox " and " unread
|
|
tags.
|
|
|
|
You should run
|
|
.B "notmuch new"
|
|
once after first running
|
|
.B "notmuch setup"
|
|
to create the initial database. The first run may take a long time if
|
|
you have a significant amount of mail (several hundred thousand
|
|
messages or more). Subsequently, you should run
|
|
.B "notmuch new"
|
|
whenever new mail is delivered and you wish to incorporate it into the
|
|
database. These subsequent runs will be much quicker than the initial
|
|
run.
|
|
|
|
Invoking
|
|
.B notmuch
|
|
with no command argument will run
|
|
.B new
|
|
if
|
|
.B "notmuch setup"
|
|
has previously been completed, but
|
|
.B "notmuch new"
|
|
has not previously been run.
|
|
.RE
|
|
|
|
Several of the notmuch commands accept search terms with a common
|
|
syntax. See the
|
|
.B "SEARCH SYNTAX"
|
|
section below for more details on the supported syntax.
|
|
|
|
The
|
|
.BR search ", " show " and " count
|
|
commands are used to query the email database.
|
|
.RS 4
|
|
.TP 4
|
|
.BR search " [options...] <search-term>..."
|
|
|
|
Search for messages matching the given search terms, and display as
|
|
results the threads containing the matched messages.
|
|
|
|
The output consists of one line per thread, giving a thread ID, the
|
|
date of the newest (or oldest, depending on the sort option) matched
|
|
message in the thread, the number of matched messages and total
|
|
messages in the thread, the names of all participants in the thread,
|
|
and the subject of the newest (or oldest) message.
|
|
|
|
Supported options for
|
|
.B search
|
|
include
|
|
.RS 4
|
|
.TP 4
|
|
.BR \-\-format= ( json | text )
|
|
|
|
Presents the results in either JSON or plain-text (default).
|
|
.RE
|
|
|
|
.RS 4
|
|
.TP 4
|
|
.B \-\-output=(summary|threads|messages|files|tags)
|
|
|
|
.RS 4
|
|
.TP 4
|
|
.B summary
|
|
|
|
Output a summary of each thread with any message matching the search
|
|
terms. The summary includes the thread ID, date, the number of
|
|
messages in the thread (both the number matched and the total number),
|
|
the authors of the thread and the subject.
|
|
.RE
|
|
.RS 4
|
|
.TP 4
|
|
.B threads
|
|
|
|
Output the thread IDs of all threads with any message matching the
|
|
search terms, either one per line (\-\-format=text) or as a JSON array
|
|
(\-\-format=json).
|
|
.RE
|
|
.RS 4
|
|
.TP 4
|
|
.B messages
|
|
|
|
Output the message IDs of all messages matching the search terms,
|
|
either one per line (\-\-format=text) or as a JSON array
|
|
(\-\-format=json).
|
|
.RE
|
|
.RS 4
|
|
.TP 4
|
|
.B files
|
|
|
|
Output the filenames of all messages matching the search terms, either
|
|
one per line (\-\-format=text) or as a JSON array (\-\-format=json).
|
|
.RE
|
|
.RS 4
|
|
.TP 4
|
|
.B tags
|
|
|
|
Output all tags that appear on any message matching the search terms,
|
|
either one per line (\-\-format=text) or as a JSON array
|
|
(\-\-format=json).
|
|
.RE
|
|
.RE
|
|
|
|
.RS 4
|
|
.TP 4
|
|
.BR \-\-sort= ( newest\-first | oldest\-first )
|
|
|
|
This option can be used to present results in either chronological order
|
|
.RB ( oldest\-first )
|
|
or reverse chronological order
|
|
.RB ( newest\-first ).
|
|
|
|
Note: The thread order will be distinct between these two options
|
|
(beyond being simply reversed). When sorting by
|
|
.B oldest\-first
|
|
the threads will be sorted by the oldest message in each thread, but
|
|
when sorting by
|
|
.B newest\-first
|
|
the threads will be sorted by the newest message in each thread.
|
|
|
|
.RE
|
|
.RS 4
|
|
By default, results will be displayed in reverse chronological order,
|
|
(that is, the newest results will be displayed first).
|
|
|
|
See the
|
|
.B "SEARCH SYNTAX"
|
|
section below for details of the supported syntax for <search-terms>.
|
|
.RE
|
|
.TP
|
|
.BR show " [options...] <search-term>..."
|
|
|
|
Shows all messages matching the search terms.
|
|
|
|
The messages will be grouped and sorted based on the threading (all
|
|
replies to a particular message will appear immediately after that
|
|
message in date order). The output is not indented by default, but
|
|
depth tags are printed so that proper indentation can be performed by
|
|
a post-processor (such as the emacs interface to notmuch).
|
|
|
|
Supported options for
|
|
.B show
|
|
include
|
|
.RS 4
|
|
.TP 4
|
|
.B \-\-entire\-thread
|
|
|
|
By default only those messages that match the search terms will be
|
|
displayed. With this option, all messages in the same thread as any
|
|
matched message will be displayed.
|
|
.RE
|
|
|
|
.RS 4
|
|
.TP 4
|
|
.B \-\-format=(text|json|mbox|raw)
|
|
|
|
.RS 4
|
|
.TP 4
|
|
.BR text " (default for messages)"
|
|
|
|
The default plain-text format has all text-content MIME parts
|
|
decoded. Various components in the output,
|
|
.RB ( message ", " header ", " body ", " attachment ", and MIME " part ),
|
|
will be delimited by easily-parsed markers. Each marker consists of a
|
|
Control-L character (ASCII decimal 12), the name of the marker, and
|
|
then either an opening or closing brace, ('{' or '}'), to either open
|
|
or close the component. For a multipart MIME message, these parts will
|
|
be nested.
|
|
.RE
|
|
.RS 4
|
|
.TP 4
|
|
.B json
|
|
|
|
The output is formatted with Javascript Object Notation (JSON). This
|
|
format is more robust than the text format for automated
|
|
processing. The nested structure of multipart MIME messages is
|
|
reflected in nested JSON output. JSON output always includes all
|
|
messages in a matching thread; in effect
|
|
.B \-\-format=json
|
|
implies
|
|
.B \-\-entire\-thread
|
|
|
|
.RE
|
|
.RS 4
|
|
.TP 4
|
|
.B mbox
|
|
|
|
All matching messages are output in the traditional, Unix mbox format
|
|
with each message being prefixed by a line beginning with "From " and
|
|
a blank line separating each message. Lines in the message content
|
|
beginning with "From " (preceded by zero or more '>' characters) have
|
|
an additional '>' character added. This reversible escaping
|
|
is termed "mboxrd" format and described in detail here:
|
|
|
|
.nf
|
|
.nh
|
|
http://homepage.ntlworld.com/jonathan.deboynepollard/FGA/mail-mbox-formats.html
|
|
.hy
|
|
.fi
|
|
.
|
|
.RE
|
|
.RS 4
|
|
.TP 4
|
|
.BR raw " (default for a single part, see \-\-part)"
|
|
|
|
For a message, the original, raw content of the email message is
|
|
output. Consumers of this format should expect to implement MIME
|
|
decoding and similar functions.
|
|
|
|
For a single part (\-\-part) the raw part content is output after
|
|
performing any necessary MIME decoding.
|
|
|
|
The raw format must only be used with search terms matching single
|
|
message.
|
|
.RE
|
|
.RE
|
|
|
|
.RS 4
|
|
.TP 4
|
|
.B \-\-part=N
|
|
|
|
Output the single decoded MIME part N of a single message. The search
|
|
terms must match only a single message. Message parts are numbered in
|
|
a depth-first walk of the message MIME structure, and are identified
|
|
in the 'json' or 'text' output formats.
|
|
.RE
|
|
|
|
.RS 4
|
|
.TP 4
|
|
.B \-\-verify
|
|
|
|
Compute and report the validity of any MIME cryptographic signatures
|
|
found in the selected content (ie. "multipart/signed" parts). Status
|
|
of the signature will be reported (currently only supported with
|
|
--format=json), and the multipart/signed part will be replaced by the
|
|
signed data.
|
|
.RE
|
|
|
|
.RS 4
|
|
.TP 4
|
|
.B \-\-decrypt
|
|
|
|
Decrypt any MIME encrypted parts found in the selected content
|
|
(ie. "multipart/encrypted" parts). Status of the decryption will be
|
|
reported (currently only supported with --format=json) and the
|
|
multipart/encrypted part will be replaced by the decrypted
|
|
content.
|
|
.RE
|
|
|
|
A common use of
|
|
.B notmuch show
|
|
is to display a single thread of email messages. For this, use a
|
|
search term of "thread:<thread-id>" as can be seen in the first
|
|
column of output from the
|
|
.B notmuch search
|
|
command.
|
|
|
|
See the
|
|
.B "SEARCH SYNTAX"
|
|
section below for details of the supported syntax for <search-terms>.
|
|
.RE
|
|
.RS 4
|
|
.TP 4
|
|
.BR count " <search-term>..."
|
|
|
|
Count messages matching the search terms.
|
|
|
|
The number of matching messages is output to stdout.
|
|
|
|
With no search terms, a count of all messages in the database will be
|
|
displayed.
|
|
.RE
|
|
.RE
|
|
|
|
The
|
|
.B reply
|
|
command is useful for preparing a template for an email reply.
|
|
.RS 4
|
|
.TP 4
|
|
.BR reply " [options...] <search-term>..."
|
|
|
|
Constructs a reply template for a set of messages.
|
|
|
|
To make replying to email easier,
|
|
.B notmuch reply
|
|
takes an existing set of messages and constructs a suitable mail
|
|
template. The Reply-to header (if any, otherwise From:) is used for
|
|
the To: address. Vales from the To: and Cc: headers are copied, but
|
|
not including any of the current user's email addresses (as configured
|
|
in primary_mail or other_email in the .notmuch\-config file) in the
|
|
recipient list
|
|
|
|
It also builds a suitable new subject, including Re: at the front (if
|
|
not already present), and adding the message IDs of the messages being
|
|
replied to to the References list and setting the In\-Reply\-To: field
|
|
correctly.
|
|
|
|
Finally, the original contents of the emails are quoted by prefixing
|
|
each line with '> ' and included in the body.
|
|
|
|
The resulting message template is output to stdout.
|
|
|
|
Supported options for
|
|
.B reply
|
|
include
|
|
.RS
|
|
.TP 4
|
|
.BR \-\-format= ( default | headers\-only )
|
|
.RS
|
|
.TP 4
|
|
.BR default
|
|
Includes subject and quoted message body.
|
|
.TP
|
|
.BR headers\-only
|
|
Only produces In\-Reply\-To, References, To, Cc, and Bcc headers.
|
|
.RE
|
|
|
|
See the
|
|
.B "SEARCH SYNTAX"
|
|
section below for details of the supported syntax for <search-terms>.
|
|
|
|
Note: It is most common to use
|
|
.B "notmuch reply"
|
|
with a search string matching a single message, (such as
|
|
id:<message-id>), but it can be useful to reply to several messages at
|
|
once. For example, when a series of patches are sent in a single
|
|
thread, replying to the entire thread allows for the reply to comment
|
|
on issue found in multiple patches.
|
|
.RE
|
|
.RE
|
|
|
|
The
|
|
.B tag
|
|
command is the only command available for manipulating database
|
|
contents.
|
|
|
|
.RS 4
|
|
.TP 4
|
|
.BR tag " +<tag>|\-<tag> [...] [\-\-] <search-term>..."
|
|
|
|
Add/remove tags for all messages matching the search terms.
|
|
|
|
Tags prefixed by '+' are added while those prefixed by '\-' are
|
|
removed. For each message, tag removal is performed before tag
|
|
addition.
|
|
|
|
The beginning of <search-terms> is recognized by the first
|
|
argument that begins with neither '+' nor '\-'. Support for
|
|
an initial search term beginning with '+' or '\-' is provided
|
|
by allowing the user to specify a "\-\-" argument to separate
|
|
the tags from the search terms.
|
|
|
|
See the
|
|
.B "SEARCH SYNTAX"
|
|
section below for details of the supported syntax for <search-terms>.
|
|
.RE
|
|
|
|
The
|
|
.BR dump " and " restore
|
|
commands can be used to create a textual dump of email tags for backup
|
|
purposes, and to restore from that dump.
|
|
|
|
.RS 4
|
|
.TP 4
|
|
.BR dump " [<filename>] [--] [<search-terms>]"
|
|
|
|
Creates a plain-text dump of the tags of each message.
|
|
|
|
Output is to the given filename, if any, or to stdout. Note that
|
|
using the filename argument is deprecated.
|
|
|
|
These tags are the only data in the notmuch database that can't be
|
|
recreated from the messages themselves. The output of notmuch dump is
|
|
therefore the only critical thing to backup (and much more friendly to
|
|
incremental backup than the native database files.)
|
|
|
|
With no search terms, a dump of all messages in the database will be
|
|
generated. A "--" argument instructs notmuch that the
|
|
remaining arguments are search terms.
|
|
|
|
See the
|
|
.B "SEARCH SYNTAX"
|
|
section below for details of the supported syntax for <search-terms>.
|
|
.RE
|
|
|
|
.TP
|
|
.BR restore " <filename>"
|
|
|
|
Restores the tags from the given file (see
|
|
.BR "notmuch dump" ")."
|
|
|
|
The input is read from the given filename, if any, or from stdin.
|
|
|
|
Note: The dump file format is specifically chosen to be
|
|
compatible with the format of files produced by sup-dump.
|
|
So if you've previously been using sup for mail, then the
|
|
.B "notmuch restore"
|
|
command provides you a way to import all of your tags (or labels as
|
|
sup calls them).
|
|
.RE
|
|
|
|
The
|
|
.B part
|
|
command can used to output a single part of a multipart MIME message.
|
|
|
|
.RS 4
|
|
.TP 4
|
|
.BR part " \-\-part=<part-number> <search-term>..."
|
|
|
|
Output a single MIME part of a message.
|
|
|
|
A single decoded MIME part, with no encoding or framing, is output to
|
|
stdout. The search terms must match only a single message, otherwise
|
|
this command will fail.
|
|
|
|
The part number should match the part "id" field output by the
|
|
"\-\-format=json" option of "notmuch show". If the message specified by
|
|
the search terms does not include a part with the specified "id" there
|
|
will be no output.
|
|
|
|
See the
|
|
.B "SEARCH SYNTAX"
|
|
section below for details of the supported syntax for <search-terms>.
|
|
.RE
|
|
|
|
The
|
|
.B config
|
|
command can be used to get or set settings int the notmuch
|
|
configuration file.
|
|
|
|
.RS 4
|
|
.TP 4
|
|
.BR "config get " <section> . <item>
|
|
|
|
The value of the specified configuration item is printed to stdout. If
|
|
the item has multiple values, each value is separated by a newline
|
|
character.
|
|
|
|
Available configuration items include at least
|
|
|
|
database.path
|
|
|
|
user.name
|
|
|
|
user.primary_email
|
|
|
|
user.other_email
|
|
|
|
new.tags
|
|
.RE
|
|
|
|
.RS 4
|
|
.TP 4
|
|
.BR "config set " <section> . "<item> [values ...]"
|
|
|
|
The specified configuration item is set to the given value. To
|
|
specify a multiple-value item, provide each value as a separate
|
|
command-line argument.
|
|
|
|
If no values are provided, the specified configuration item will be
|
|
removed from the configuration file.
|
|
.RE
|
|
|
|
.SH SEARCH SYNTAX
|
|
Several notmuch commands accept a common syntax for search terms.
|
|
|
|
The search terms can consist of free-form text (and quoted phrases)
|
|
which will match all messages that contain all of the given
|
|
terms/phrases in the body, the subject, or any of the sender or
|
|
recipient headers.
|
|
|
|
As a special case, a search string consisting of exactly a single
|
|
asterisk ("*") will match all messages.
|
|
|
|
In addition to free text, the following prefixes can be used to force
|
|
terms to match against specific portions of an email, (where
|
|
<brackets> indicate user-supplied values):
|
|
|
|
from:<name-or-address>
|
|
|
|
to:<name-or-address>
|
|
|
|
subject:<word-or-quoted-phrase>
|
|
|
|
attachment:<word>
|
|
|
|
tag:<tag> (or is:<tag>)
|
|
|
|
id:<message-id>
|
|
|
|
thread:<thread-id>
|
|
|
|
folder:<directory-path>
|
|
|
|
The
|
|
.B from:
|
|
prefix is used to match the name or address of the sender of an email
|
|
message.
|
|
|
|
The
|
|
.B to:
|
|
prefix is used to match the names or addresses of any recipient of an
|
|
email message, (whether To, Cc, or Bcc).
|
|
|
|
Any term prefixed with
|
|
.B subject:
|
|
will match only text from the subject of an email. Searching for a
|
|
phrase in the subject is supported by including quotation marks around
|
|
the phrase, immediately following
|
|
.BR subject: .
|
|
|
|
The
|
|
.B attachment:
|
|
prefix can be used to search for specific filenames (or extensions) of
|
|
attachments to email messages.
|
|
|
|
For
|
|
.BR tag: " and " is:
|
|
valid tag values include
|
|
.BR inbox " and " unread
|
|
by default for new messages added by
|
|
.B notmuch new
|
|
as well as any other tag values added manually with
|
|
.BR "notmuch tag" .
|
|
|
|
For
|
|
.BR id: ,
|
|
message ID values are the literal contents of the Message\-ID: header
|
|
of email messages, but without the '<', '>' delimiters.
|
|
|
|
The
|
|
.B thread:
|
|
prefix can be used with the thread ID values that are generated
|
|
internally by notmuch (and do not appear in email messages). These
|
|
thread ID values can be seen in the first column of output from
|
|
.B "notmuch search"
|
|
|
|
The
|
|
.B folder:
|
|
prefix can be used to search for email message files that are
|
|
contained within particular directories within the mail store. Only
|
|
the directory components below the top-level mail database path are
|
|
available to be searched.
|
|
|
|
In addition to individual terms, multiple terms can be
|
|
combined with Boolean operators (
|
|
.BR and ", " or ", " not
|
|
, etc.). Each term in the query will be implicitly connected by a
|
|
logical AND if no explicit operator is provided, (except that terms
|
|
with a common prefix will be implicitly combined with OR until we get
|
|
Xapian defect #402 fixed).
|
|
|
|
Parentheses can also be used to control the combination of the Boolean
|
|
operators, but will have to be protected from interpretation by the
|
|
shell, (such as by putting quotation marks around any parenthesized
|
|
expression).
|
|
|
|
Finally, results can be restricted to only messages within a
|
|
particular time range, (based on the Date: header) with a syntax of:
|
|
|
|
<initial-timestamp>..<final-timestamp>
|
|
|
|
Each timestamp is a number representing the number of seconds since
|
|
1970\-01\-01 00:00:00 UTC. This is not the most convenient means of
|
|
expressing date ranges, but until notmuch is fixed to accept a more
|
|
convenient form, one can use the date program to construct
|
|
timestamps. For example, with the bash shell the following syntax would
|
|
specify a date range to return messages from 2009\-10\-01 until the
|
|
current time:
|
|
|
|
$(date +%s \-d 2009\-10\-01)..$(date +%s)
|
|
.SH ENVIRONMENT
|
|
The following environment variables can be used to control the
|
|
behavior of notmuch.
|
|
.TP
|
|
.B NOTMUCH_CONFIG
|
|
Specifies the location of the notmuch configuration file. Notmuch will
|
|
use ${HOME}/.notmuch\-config if this variable is not set.
|
|
.SH SEE ALSO
|
|
The emacs-based interface to notmuch (available as
|
|
.B notmuch.el
|
|
in the Notmuch distribution).
|
|
|
|
The notmuch website:
|
|
.B http://notmuchmail.org
|
|
.SH CONTACT
|
|
Feel free to send questions, comments, or kudos to the notmuch mailing
|
|
list <notmuch@notmuchmail.org> . Subscription is not required before
|
|
posting, but is available from the notmuchmail.org website.
|
|
|
|
Real-time interaction with the Notmuch community is available via IRC
|
|
(server: irc.freenode.net, channel: #notmuch).
|