How to search gpg-encrypted email with notmuch-mutt

gpgmuttnotmuch

I'm using mutt, with notmuch-mutt indexing the mail. I have a macro defined in mutt to search multiple mailboxes, using notmuch's integration (as suggested in the man page).

macro index <F3> \
  "<enter-command>set my_old_pipe_decode=\$pipe_decode my_old_wait_key=\$wait_key nopipe_decode nowait_key<enter>\
  <shell-escape>notmuch-mutt -r --prompt search --decrypt<enter>\
  <change-folder-readonly>`echo ${XDG_CACHE_HOME:-$HOME/.cache}/notmuch/mutt/results`<enter>\
  <enter-command>set pipe_decode=\$my_old_pipe_decode wait_key=\$my_old_wait_key<enter>" \
  "notmuch: search mail"

I also have GPG-encrypted email. mutt can unencrypt these fine, and its internal search works perfectly on the encrypted emails. However, notmuch-mutt fails to search these properly. Notmuch 0.6 (from 2011) apparently supports GPG, however this doesn't work for me out of the box. I'm running Notmuch 0.20.2. Is there a way to search encrypted mails using notmuch-mutt?

Best Answer

Update as of 2018/03/18: This feature was merged upstream, and released in notmuch 0.26.

Please note:

The contents of the index are sufficient to roughly reconstruct the cleartext of the message itself, so please ensure that the notmuch index itself is adequately protected. DO NOT USE this feature without considering the security of your index.

See the comments below this answer how to make use of this feature.

--

This is in the works upstream, as of today, 2016/02/09. Quoting the linked mail:

This is the third draft of the series initially announced in id:1449718786-28000-1-git-send-email-dkg at fifthhorseman.net (second draft was in id:1453258369-7366-1-git-send-email-dkg at fifthhorseman.net). It differs from v2 in that it incorporates the recent improvements in detecting and processing S/MIME signatures.

From the v2 description:

Notmuch currently doesn't index the cleartext of encrypted mail. This is the right choice by default, because the index is basically cleartext-equivalent, and we wouldn't want every indexed mailstore to leak the contents of its encrypted mails.

However, if a notmuch user has their index in a protected location, they may prefer the convenience of being able to search the contents of (at least some of) their encrypted mail.

This series of patches enables notmuch to index the cleartext of specific encrypted messages when they're being added via "notmuch new" or "notmuch insert", via a new --try-decrypt flag.

If --try-decrypt is used, and decryption is successful for part of a message, the message gets an additional "index-decrypted" tag. If decryption of part of a message fails, the message gets an additional "index-decryption-failed" tag.

v2 addresses the concerns raised from the helpful feedback on the previous series, and adds a notmuch_indexopts_t object that can be used to declare options for indexing messages, including a "try_decrypt" boolean.

Additionally, this series adds a new function to libnotmuch:

notmuch_message_reindex (notmuch_message_t *message, notmuch_indexopts_t *indexopts)

Which allows user of the library to adjust the indexing options of a given message.

The CLI is additionally augmented with a new notmuch subcommand, "notmuch reindex", which also has a --try-decrypt flag.

So a user who has their message index stored securely and wants to index the cleartext of all encrypted messages they've received can do something like:

notmuch reindex --try-decrypt tag:encrypted and not tag:index-decrypted

Or can clear all indexed cleartext from their database with:

notmuch reindex tag:encrypted and tag:index-decrypted

Related Question