NOTMUCH-INSERT(1)

NAME
notmuch-insert - add a message to the maildir and notmuch database

SYNOPSIS

notmuch insert [option ...] [+<tag>|-<tag> ...]

DESCRIPTION

notmuch insert reads a message from standard input and delivers it into the maildir directory given by configuration option database.mail_root <#nmconfig-database.mail_root>, then incorporates the message into the notmuch database. It is an alternative to using a separate tool to deliver the message then running notmuch-new <#notmuch-new-1> afterwards.

The new message will be tagged with the tags specified by the new.tags <#nmconfig-new.tags> configuration option, then by operations specified on the command-line: tags prefixed by '+' are added while those prefixed by '-' are removed.

If the new message is a duplicate of an existing message in the database (it has same Message-ID), it will be added to the maildir folder and notmuch database, but the tags will not be changed.

The insert command supports hooks. See notmuch-hooks <#notmuch-hooks-5> for more details on hooks.

Option arguments must appear before any tag operation arguments. Supported options for insert include

--folder=<folder>
    Deliver the message to the specified folder, relative to the top-level directory given by the value of database.mail_root <#nmconfig-database.mail_root>. The default is the empty string, which means delivering to the top-level directory.

--create-folder
    Try to create the folder named by the --folder option, if it does not exist. Otherwise the folder must already exist for mail delivery to succeed.

--keep
    Keep the message file if indexing fails, and keep the message indexed if applying tags or maildir flag synchronization fails. Ignore these errors and return exit status 0 to indicate successful mail delivery.

--no-hooks
    Prevent hooks from being run.

--world-readable
    When writing mail to the mailbox, allow it to be read by users other than the current user. Note that this does not override umask. By default, delivered mail is only readable by the current user.

--decrypt=(true|nostash|auto|false)
    If true and the message is encrypted, try to decrypt the message while indexing, stashing any session keys discovered. If auto, and notmuch already knows about a session key for the message, it will try decrypting using that session key but will not try to access the user's secret keys. If decryption is successful, index the cleartext itself. Either way, the message is always stored to disk in its original form (ciphertext).

    nostash is the same as true except that it will not stash newly-discovered session keys in the database.

    Be aware that the index is likely sufficient (and a stashed session key is certainly sufficient) to reconstruct the cleartext of the message itself, so please ensure that the notmuch message index is adequately protected. DO NOT USE --decrypt=true or --decrypt=nostash without considering the security of your index.

    See also index.decrypt <#nmconfig-index.decrypt> in notmuch-config <#notmuch-config-1>.

CONFIGURATION

Indexing is influenced by the configuration options index.decrypt <#nmconfig-index.decrypt> and index.header.<prefix> <#nmconfig-index.header.-prefix>. Tagging is controlled by options new.tags <#nmconfig-new.tags> and maildir.synchronize_flags <#nmconfig-maildir.synchronize_flags>. See notmuch-config <#notmuch-config-1> for details.

EXIT STATUS

This command returns exit status 0 on successful mail delivery, non-zero otherwise. The default is to indicate failed mail delivery on any errors, including message file delivery to the filesystem, message indexing to Notmuch database, changing tags, and synchronizing tags to maildir flags. The --keep option may be used to settle for successful message file delivery.

This command supports the following special exit status code for errors most likely to be temporary in nature, e.g. failure to get a database write lock.

75 (EX_TEMPFAIL)
    A temporary failure occurred; the user is invited to retry.

    The exit status of the post-insert hook does not affect the exit status of the insert command.

SEE ALSO

notmuch <#notmuch-1>, notmuch-config <#notmuch-config-1>, notmuch-count <#notmuch-count-1>, notmuch-dump <#notmuch-dump-1>, notmuch-hooks <#notmuch-hooks-5>, notmuch-reply <#notmuch-reply-1>, notmuch-restore <#notmuch-restore-1>, notmuch-search <#notmuch-search-1>, notmuch-search-terms <#notmuch-search-terms-7>, notmuch-show <#notmuch-show-1>, notmuch-tag <#notmuch-tag-1>

Author
Carl Worth and many others

Copyright
2009-2026, Carl Worth and many others