vern@2011-12-10:/lib% ls tags
mutt, mu, and recoll

mutt多邮箱全文快速搜索

如果不需要对邮件正文的快速搜索,mu提供的主题、发件人、收件人、日期、标记等搜索功能应该足够了。

基于xapian的mu虽然用UTF8编码索引了邮件正文,但是由于分词问题,cjk正文搜索的功能几乎不能用。

同样基于xapian的recoll却实现了,虽然自带的QT界面没什么吸引力,但是命令行界面就不一样拉。

1$ sudo apt-get install recoll
2$ recoll
3$ cat > ~/.recoll/recoll.conf <<-EOF
# 希望被索引的邮箱目录
topdirs = /your/maildir/
# 保存索引结果的目录
dbdir = /your/folder
EOF
4$ recollindex
5$ recoll -t -q "中文任意关键字"

先安装 recoll<1>,感受一下图形界面<2>,确认配置(图形界面里面也可以配置)<3>,创建索引(图形界面也可以创建)<4>,搜索关键字(图形界面也可以)<5>。

接下来就是通过 recoll 的命令行输出结果,把搜索到的目标邮件的绝对路径软链接到一个mutt的虚拟邮箱(假设虚拟邮箱名是 bingo)。

6$ export MAILDIR="/your/maildir/"
7$ recoll -t -q "中文任意关键字" | grep message/rfc822 | sed -s 's,^.*\('${MAILDIR}'[^]]*\)\].*$,"\1",' | xargs ln -sft ${MAILDIR}bingo/cur

不希望每次都从mutt切换到终端执行这么一长串命令的话,可以自己写一个bash脚本,然后再写一个mutt的宏并设定一个快捷键(假设是数字1左边的按键)。

8$ cat > ~/.mutt/mutt-grep.bash <<-EOF
#!/bin/bash

MAILDIR=/your/maildir
MFOLDER=bingo
recoll -t -q ${*} | grep message/rfc822 | sed -s 's,^.*\('$MAILDIR'[^]]*\)\].*$,\"\1\",' | xargs ln -sft $MAILDIR/$MFOLDER/cur/
EOF
9$ echo 'macro index,pager \` "<shell-escape>~/.mutt/mutt-grep.bash " "recoll find"' >> ~/.muttrc

打开mutt,按下快捷键,输入要搜索的内容,回车,切换到bingo邮箱,浏览搜索结果。

这样好像还是有点麻烦,可惜我对 bash 不熟悉,所以只针对 zsh 做了一个脚本,实现了下面这些功能

recoll 不止是邮件索引工具,他是一个类似 Google Desktop 的全文索引工具。squeeze的版本(1.13.04)比较旧,我打了一个squeeze-backports(1.16.2)。