Notmuch
Notmuch 是一个邮件索引器。从本质上讲,它是 xapian 之上的一个非常小的前端。 与 Sup 一样,它只专注于一件事:为电子邮件建立索引。Notmuch 可用作电子邮件阅读器,也可简单地用作其他 MUA(如 mutt)的索引器和搜索工具。
概述[编辑 | 编辑源代码]
Notmuch 由 C 语言编写,速度比 sup-mail 快一个数量级。 Notmuch 可以在索引过程中终止,下次运行时会继续上次的工作。 与 sup-mail 一样,它也不提供永久删除不需要的电子邮件的方法(不过,请参阅#永久删除电子邮件)。 它不能获取或发送邮件,也不能存储你的电子邮件地址,你需要使用 OfflineIMAP、msmtp 和 abook 等程序来完成这些任务。
安装 notmuch包 软件包。它提供了 python、vim 和 emacs 绑定。
初次使用[编辑 | 编辑源代码]
安装完成后,您可以运行以下程序进入交互式设置:
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 界面。它以 alot包 和 alot-gitAUR 的形式提供。
Alot 使用 mailcap 来处理不同类型的文件。目前包括 HTML 邮件,这意味着您需要配置一个 ~/.mailcap
文件才能查看 HTML 邮件。至少要在 ~/.mailcap
中加入这一行:
text/html; w3m -dump -o -document_charset=%{charset} %s; nametemplate=%s.html; copiousoutput
此处使用 w3m包,也可使用其他基于文本的客户端,如 links包 或 lynx包,但它们的参数可能有所不同。
当然,还可以配置更多的文件处理程序。
bower[编辑 | 编辑源代码]
bower 是另一个 CLI 界面,使用 Mercury 编写。可通过 bower-mailAUR 获取。
Neomutt[编辑 | 编辑源代码]
Neomutt - 另一个包含许多功能补丁的 mutt fork,其中包括 Notmuch 集成补丁。安装 neomutt包 或 neomutt-gitAUR 软件包。
astroid[编辑 | 编辑源代码]
Astroid 是一款使用 C++ 和 GTK 编写的图形化 MUA 和 notmuch 界面。可通过 astroid包 或 astroid-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
钩子中,就能确保在更新数据库前删除文件。
参见[编辑 | 编辑源代码]
- notmuch 官方网站
- notmuch 仓库
- muchsync - 跨设备同步 Notmuch 邮件
- lieer - 快速获取和发送电子邮件,并在 notmuch 和 GMail 之间实现双向标签同步