Searching
Adapted from the Jaromail manual source. Copyleft © 2010–2023 Denis Roio. GNU Free Documentation License 1.3 or later; full permission notice.
Searching across all your emails it is as important as demanding of a task. Jaro Mail implements it using Notmuch which is relying on the Xapian search engine, completely relying on local computations made on your machine, there is no data at all being communicated on-line.
To index and tag all your emails that are locally archived in Jaro Mail use:
jaro indexThis will take a while and increase the size of the storage of about one sixth of its total occupation, but will definitely come useful when in need of searching rapidly across all available emails. To run a search for emails containing the 'open source' string, do
jaro search open sourceTo search for all emails containing this string and dated between now and the last two weeks, do
jaro search open source date:2w..The search command prints out a list of found filenames which may be useful to a script, but less useful to a human. In order to read a quick summary of the emails found it is possible to pipe the results into the headers command which will print out date, sender and subject of each file
jaro search open source date:2w.. | jaro headersSearching has also an interactive interface called alot which pops up to show search results and browse through them, refine the terms and in general operate on emails with the usual keys. One can also reply to emails directly from alot:
jaro alot search expression strings folder:knownTo restrict the search to a single folder, one can use the folder: prefix to search terms. Tags can be used also with tag: as well dates can be specified with ranges using date:. Consecutive string expressions are aloud to refine the search match, connected with logical and/or, plus also the header to search can be indicated, as for instance from: or to:. Read more about this below in the Search term and Date and time search sections (extracts from the notmuch-search-terms manpage) and on the notmuch webpage at http://notmuchmail.org
With the addr command the search will be run on the whitelist addressbook entries instead of actual email contents.
jaro addr joeWill list all addresses matching the string 'joe' inside the whitelist addressbook. Also the blacklist can be searched this way adding the switch -l blacklist.
Combining terms
In addition to individual terms, multiple terms can be combined with Boolean operators ( and, or, not , etc.). Each term in the query will be implicitly connected by a logical AND if no explicit operator is provided.
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).
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>
date:<since>..<until>The from: prefix is used to match the name or address of the sender of an email message.
The 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 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 subject:.
The /attachment:/ prefix can be used to search for specific filenames (or extensions) of attachments to email messages.
For /tag:/ and is: valid tag values include inbox and unread by default for new messages added by notmuch new as well as any other tag values added manually with notmuch tag.
For id:, message ID values are the literal contents of the Message-ID: header of email messages, but without the '<', '>' delimiters.
The 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 notmuch search
The folder: prefix can be used to search for email message files that are contained within particular directories within the mail store. If the same email message has multiple message files associated with it, it's sufficient for a match that at least one of the files is contained within a matching directory. Only the directory components below the top-level mail database path are available to be searched.
Date and time search
See DATE AND TIME SEARCH below for details on the range expression, and supported syntax for <since> and <until> date and time expressions.
The date: prefix can be used to restrict the results to only messages within a particular time range (based on the Date: header) with a range syntax of:
date:<since>..<until>The syntax <initial-timestamp>..<final-timestamp> can be represented using the number of seconds since 1970-01-01 00:00:00 UTC.
The search syntax also understands a variety of standard and natural ways of expressing dates and times, both in absolute terms '2012-10-24' and in relative terms 'yesterday'. Any number of relative terms can be combined '1 hour 25 minutes' and an absolute date/time can be combined with relative terms to further adjust it. A non-exhaustive description of the syntax supported for absolute and relative terms is given below.
The range expression
date:<since>..<until>The above expression restricts the results to only messages from <since> to <until>, based on the Date: header.
<since> and <until> can describe imprecise times, such as "yesterday". In this case, <since> is taken as the earliest time it could describe (the beginning of yesterday) and <until> is taken as the latest time it could describe (the end of yesterday). Similarly, date:january..february matches from the beginning of January to the end of February.
Currently, we do not support spaces in range expressions. You can replace the spaces with '\', or (in most cases) '-', or (in some cases) leave the spaces out altogether. Examples in this man page use spaces for clarity.
Open-ended ranges are supported (since Xapian 1.2.1), i.e. it's possible to specify date:..<until> or date:<since>.. to not limit the start or end time, respectively.
Entering date:expr without ".." (for example date:yesterday) won't work, as it's not interpreted as a range expression at all. You can achieve the expected result by duplicating the expr both sides of ".." (for example date:yesterday..yesterday).
Relative date and time
[N|number]
(years|months|weeks|days|hours|hrs|minutes|mins|seconds|secs) [...]All refer to past, can be repeated and will be accumulated.
Units can be abbreviated to any length, with the otherwise ambiguous single m being m for minutes and M for months.
Number can also be written out one, two, …, ten, dozen, hundred. Additionally, the unit may be preceded by "last" or "this" (e.g., "last week" or "this month").
When combined with absolute date and time, the relative date and time specification will be relative from the specified absolute date and time.
Examples:
5M2dtwo weeksAbsolute time formats
H[H]:MM[:SS]
[(am|a.m.|pm|p.m.)]
H[H] (am|a.m.|pm|p.m.)
HHMMSS
now
noon
midnightExamples:
17:055pmAbsolute date formats
YYYY-MM[-DD]
DD-MM[-[YY]YY]
MM-YYYY
M[M]/D[D][/[YY]YY]
M[M]/YYYY
D[D].M[M][.[YY]YY]
D[D][(st|nd|rd|th)] Mon[thname] [YYYY]
Mon[thname] D[D][(st|nd|rd|th)] [YYYY]
Wee[kday]Month names can be abbreviated at three or more characters.
Weekday names can be abbreviated at three or more characters.
Examples:
2012-07-3131-07-20127/31/2012August 3Time zones
(+|-)HH:MM(+|-)HH[MM]Some time zone codes.
Examples:
UTC
EET