Notmuch

来自 Arch Linux 中文维基

Notmuch 是一个邮件索引器。从本质上讲,它是 xapian 之上的一个非常小的前端。 与 Sup 一样,它只专注于一件事:为电子邮件建立索引。Notmuch 可用作电子邮件阅读器,也可简单地用作其他 MUA(如 mutt)的索引器和搜索工具。

概述[编辑 | 编辑源代码]

Notmuch 由 C 语言编写,速度比 sup-mail 快一个数量级。 Notmuch 可以在索引过程中终止,下次运行时会继续上次的工作。 与 sup-mail 一样,它也不提供永久删除不需要的电子邮件的方法(不过,请参阅#永久删除电子邮件)。 它不能获取或发送邮件,也不能存储你的电子邮件地址,你需要使用 OfflineIMAPmsmtpabook 等程序来完成这些任务。

安装 notmuch 软件包。它提供了 pythonvimemacs 绑定。

初次使用[编辑 | 编辑源代码]

安装完成后,您可以运行以下程序进入交互式设置:

 notmuch setup

程序会提示你输入邮箱地址、主邮箱地址和副邮箱地址。你也可以直接编辑配置文件,该文件默认创建在 $HOME/.notmuch-config

邮件目录的后续重新索引通过

 notmuch new

前端[编辑 | 编辑源代码]

一系列使用 notmuch 的方法,包括 CLI 或 Unix $EDITORS

Emacs[编辑 | 编辑源代码]

notmuch 的默认前端是 Emacs。它是由开发 notmuch 的同一批人开发的。

Vim[编辑 | 编辑源代码]

notmuch-vim 软件包中包含一个 Vim 界面。要启动它,请键入:

vim -c NotMuch

alot[编辑 | 编辑源代码]

alot 是用 Python 编写的 notmuch 独立 CLI 界面。它以 alotalot-gitAUR 的形式提供。

Alot 使用 mailcap 来处理不同类型的文件。目前包括 HTML 邮件,这意味着您需要配置一个 ~/.mailcap 文件才能查看 HTML 邮件。至少要在 ~/.mailcap 中加入这一行:

 text/html; w3m -dump -o -document_charset=%{charset} %s; nametemplate=%s.html; copiousoutput

此处使用 w3m,也可使用其他基于文本的客户端,如 linkslynx,但它们的参数可能有所不同。

当然,还可以配置更多的文件处理程序。

bower[编辑 | 编辑源代码]

bower 是另一个 CLI 界面,使用 Mercury 编写。可通过 bower-mailAUR 获取。

Neomutt[编辑 | 编辑源代码]

Neomutt - 另一个包含许多功能补丁的 mutt fork,其中包括 Notmuch 集成补丁。安装 neomuttneomutt-gitAUR 软件包。

astroid[编辑 | 编辑源代码]

Astroid 是一款使用 C++ 和 GTK 编写的图形化 MUA 和 notmuch 界面。可通过 astroidastroid-gitAUR 安装。GUI 设计非常快速,可预览 HTML 和附件,并可通过键盘导航。它可以进行大量配置,你可以使用自己喜欢的嵌入式编辑器,也可以从外部启动它。查看 Tour 了解如何使用 astroid 以及完整设置的说明,或查看 README 了解更多信息。

与 mutt 集成[编辑 | 编辑源代码]

如果你使用 mutt 作为你的 MUA,那么 notmuch 就是你索引和搜索邮件的绝佳辅助工具。notmuch-mutt 软件包提供了将 notmuch 与 mutt 集成的脚本。

安装 notmuch-mutt 软件包并配置 notmuch 后,在使用 notmuch 从 mutt 进行搜索前,只需添加按键绑定以从 mutt 调用 notmuch-mutt perl 脚本。notmuch contrib source 建议在 .muttrc 中添加以下内容:

macro index <F8> \
"<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<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"

macro index <F9> \
"<enter-command>set my_old_pipe_decode=\$pipe_decode my_old_wait_key=\$wait_key nopipe_decode nowait_key<enter>\
<pipe-message>notmuch-mutt -r thread<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: reconstruct thread"

macro index <F6> \
"<enter-command>set my_old_pipe_decode=\$pipe_decode my_old_wait_key=\$wait_key nopipe_decode nowait_key<enter>\
<pipe-message>notmuch-mutt tag -- -inbox<enter>\
<enter-command>set pipe_decode=\$my_old_pipe_decode wait_key=\$my_old_wait_key<enter>" \
"notmuch: remove message from inbox"

上文使用 F8 以使用 notmuch 搜索收件箱,使用 F9 从搜索结果创建线程,使用 F6 标记搜索结果。

与 NeoMutt 集成[编辑 | 编辑源代码]

如果使用 neomutt,则不需要 notmuch-mutt 软件包。取而代之的是,创建一个包含一些基本(虚拟)邮箱的 ~/.mailboxes。虚拟邮箱并非实际文件夹,而是 notmuch 查询特定标记的结果:

~/.mailboxes
virtual-mailboxes "inbox" "notmuch://?query=tag:inbox"
virtual-mailboxes "archive" "notmuch://?query=tag:archive"
virtual-mailboxes "sent" "notmuch://?query=tag:sent"
virtual-mailboxes "newsletters" "notmuch://?query=tag:newsletters"

接下来,启用虚拟 spoolfile 并将其作为来源,让 mutt 知晓虚拟邮箱:

~/.muttrc
set virtual_spoolfile=yes
set folder=notmuch-root-folder
source ~/.mailboxes

此时,mutt 仍然会把你的邮箱列为空邮箱,因为你的邮件还没有被标记,所以查询的邮件也不是很多。要填满虚拟邮箱,首先需要标记邮件目录中的邮件。一个非常简单的方法是创建一个 shell 脚本,如下所示:

~/.scripts/notmuch-hook.sh
#!/bin/sh
notmuch new
# retag all "new" messages "inbox" and "unread"
notmuch tag +inbox +unread -new -- tag:new
# tag all messages from "me" as sent and remove tags inbox and unread
notmuch tag -new -inbox +sent -- from:me@example.org or from:me@myself.com
# tag newsletters, but dont show them in inbox
notmuch tag +newsletters +unread -new -- from:newsletter@example.org or subject:'newsletter*'

将 shell 脚本设置为可执行并运行它:

 ~/.scripts/notmuch-hook.sh

为使上述示例有效,请确保 notmuch 将新信息标记为 'new':

~/.notmuch-config
[new]
tags=new

最后,您的钩子脚本需要在新邮件到达时重新运行。如果使用 offlineimap 将 IMAP 同步到本地 maildir,则需要创建一个同步后钩子:

~/.offlineimaprc
[Account myaccount]
postsynchook = ~/.scripts/notmuch-hook.sh

一些有用的按键绑定:

~/.muttrc
macro index A "<modify-labels>+archive -unread -inbox\\n" "Archive message"
macro index c "<change-vfolder>?" "Change to vfolder overview"
macro index \\\\ "<vfolder-from-query>" "Search mailbox"

永久删除电子邮件[编辑 | 编辑源代码]

一种方法是为希望从磁盘中删除的邮件保留一个标签,例如 "已删除"。然后,你可以将搜索标签与 xargs 结合起来,永久删除它们:

 notmuch search --output=files --format=text0 tag:killed | xargs -r0 rm
 notmuch new

将此钩子放入 notmuch 的 pre-new 钩子中,就能确保在更新数据库前删除文件。

参见[编辑 | 编辑源代码]