mutt是Linux下的一个email程序。Mutt显然是一个Unix的邮件程序,它跟一般的Windows邮件程序不同,它不是一个包罗万象的大杂烩。你甚至会发现它根本不直接发出邮件,它从来不自己编辑邮件,它从来不自己对邮件进行加密和数字签名……Mutt更像一个文件管理器,只不过它管理的是email。它的功能是借助各个最强大的程序来实现的。这符合unix的设计思想。
特点
超强的信件分类功能
你可以设置几乎任意的条件来从一堆信件里找到你所需要的那封。比如,你可以说:“只显示一个月之类,不是清华大学发来的,内容包含‘光盘’两个字的信件”,“把从fvwm邮件列表一个星期以前发来的,而且还没有看过的信件全部移到叫old-fvwm的信箱”……
信件打分排序功能
你可以给你的信件打分,信件最后的得分就是它的这些分数相加的结果。
几乎任意条件的彩色设置
可以随意绑定热键
这个功能类似Emacs。你可以把几乎任意的功能绑定到键盘。
设置条件挂钩
可以对满足不同条件的信件,信箱采取不同的设置。比如,对于用来收邮件的那些信箱,显示邮件时只显示from,date,subject,x-mailer这几个邮件头,而对sent-mail信箱还显示to这个邮件头;发给家人,朋友的信件都存到一个特别的信箱中保存。
批量邮件处理
可以把一些邮件作上标记(tag),然后对它们进行同意操作,比如删除,存到其它文件,删除附件,……
任选编辑器
用一个强大的编辑器来编辑你的email你才能高效的完成编辑。一般email客户端都是用的自己内嵌的编辑器,这些编辑器一般功能很弱。mutt并没有试图自己写一个编辑器,因为它明显不可能超过VIM和Emacs,所以mutt可以让你自己选择你喜欢的编辑器,它会去调用它,并且设置很多方便编辑email的参数。编辑器编辑完毕后mutt会从编辑器得到编辑好的文本,然后你可以加附件什么的。我现在在mutt里使用Emacs编辑器。
高级的MIME支持
Mutt不像一般的email程序那样直接支持打开某些种类的附件。因为附件的种类实在太多,一个email客户端没有可能自己实现所有的功能。所以Mutt提供了.mailcap的设置。
支持PGP加密
Mutt可以利用GnuPG这样的程序来对信件进行PGP加密和数字签名。别人可以用你的公用密钥给你发一封只有你才能看到的信件。也可以用私有密钥给信件“签名”,收信人可以用公布的公钥验证这封信。
基本配置
开始使用时需要的一些必要的配置。
1.alternates
这个变量应该设置为一个正则表达式,它是你有可能收到信件的地址。
这个变量有助于Mutt显示邮件的地址特征。一般Mutt会在index中显示几种不同的邮件地址特征,它们是由$to_chars变量指定的。
2.to_chars
一般$to_chars的定义为"+TCFL".
*""(空):表示这封邮件不是给你的,也就是说To:和Cc:Bcc:都没有你的地址,很多转发的邮件,未确认的邮件列表邮件,垃圾邮件都有这个特征。
*+:表示你是收件人(To:是你的地址之一),而且是唯一的收件人。
*T:表示你是收件人(To:包括了你的地址之一),但是你不是唯一的收件人。这是一封群体信件。
*C:表示你的地址出现在CC:,但是你不是唯一的被抄送的人。
*F:表示这封邮件是你发出去的。
*L:表示这是一封你已经加入的邮件列表寄来的。
3.index_format
这是一个格式字符串,用来控制你的index的列表显示。它的缺省定义是:
setindex_format="%4C%Z%{%b%d}%-15.15L(%4l)%s"
显示出来就是这个样子:
index-original
这里有一个简单的对应关系,%4C表示4位数的序号,%Z是邮件状态,你看到那个"r"了吗?也就是说我已经回了这封信。%Z还包含那个"T",也就是说这封信不只是寄给我一个人的,我爸爸每次寄信都会CC他自己一份:)%{%b%d}是日期格式,它是由strftime()函数的格式定义的。这里%b就是根据当前的locale设置的月份简称,“12月”。%d就是十进制表示的每月的日号,“31”。后面的……你自己看看manual吧,我不罗嗦了。
4.mailboxes
指定你有那些信箱文件。当你按"c"切换信箱时,再按Tab键,这些信箱就可供你选择。
mailboxesMailboxsent-mail
5.header
这是一个bool型变量。它表明你在回信时引用原文是否加入原文的邮件头。
setheader=no
6.quit
mutt-quit
可以设置为yes,no,ask-yes,或者ask-no.这是说,当你按q退出时,是否提示你(ask-yes,ask-no),还是直接就退出了(yes),还是根本不理你(no)。
setquit=ask-yes
7.auto_view
那些类型的附件是允许直接通过.mailcap浏览的?
auto_viewtext/HTML
8.move
这也是一个提示性变量。它是确定当你退出时,是否提示你把信件从spool移动到的mbox文件。
setmove=no
9.ascii_chars
当Mutt用thread方式显示时,是否用纯ascii表示树状列表。
setascii_chars=yes
如果设置了就是这个样子:
mutt-ascii
10.include
回信时是否包含原文。
setinclude
11.indent_str
回信的引文之前插入那个符号?
setindent_str=">"
12.my_hdr
设置你自己的邮件头。
13.打分
新信件+4分,爸爸(w2r007)发来的+2,主题包含“通知”的+2,主题包含“Circulation”+3,已经标记删除的-5,上次没有读的+1,包含“believe”的-10(垃圾广告!)。
score"~N"+4
score"~fw2r007"+2
score"~s通知"+2
score"~sCirculation"+3
score"~D"-5
score"~O"+1
score"~sbelieve"-10
14.sort
排序方式。可以是
date
date-sent
date-received
from
mailbox-order(unsorted)
score
size
subject
threads
to
几种方式,每种方式可以在前面加一个"reverse-"前缀表示反方向排序。我一般按分数排序:
setsort=score
15.sort_aux
当用thread排序方式时,我们对各个thread的相对排序顺序。
setsort_aux=date
16.pager_stop
如果设置,那么你在pager(就是你看信的内容的窗口里)翻页时,如果翻到最后,再按往下翻也不会翻到下一封信件。如果不设置就会自动翻到下一封信。
setpager_stop
17.500米口径球面射电望远镜_reply
如果设置,当你按"r"回信时,就不会再提示你输入回信地址和主题,直接进入编辑模式。
setfast_reply
18.resolve
当你按"t"或者"D"之类的标记操作时,是否自动把光标移动到下一封信件。
setresolve=yes
19.alias_file
当你在index里按"a"为来信者取别名时,使用哪一个别名文件保存这个别名。
setalias_file=/home/wy/.mutt.alias
20.record
你发出的邮件保存到那个信箱文件?比如可以像我这样每个月发出的信件放在不同的文件里。
setrecord="~/Mail/=sent-mail-`date+%Y-%m`"
21.charset
你的终端支持哪一种编码的显示?这个必须和你的终端编码一样。
setcharset="gb2312"
22.send_charset
发信时可以使用的字符集。只有当前面的字符集不能正确表示信件内容时才会使用后面的。比如,如果你像下面这样设置,你的信件如果全是英文,那么信件就会被设置为us-ascii编码,如果出现了法语字符,那么就会用iso-8859-1,如果出现了汉字就会用gb2312,如果以上都不是,那么就用utf-8。
setsend_charset="us-ascii:iso-8859-1:gb2312:utf-8"
23.wait_key
当外部程序退出时,是否要求用户按一个键才返回。这在察看某些壳层命令输出时是比要的,否则它们一下就消失了。
setwait_key=yes
24.confirmappend
当你要把信件存到另一个信箱,而这个信箱已经存在时,是否提示附加?
setnoconfirmappend
25.edit_headers
是否把邮件头也放在编辑器里可以修改?
setedit_headers=no
26.pager_index_lines
当你在用pager看信件时,在index留出多少行显示邮件列表?
setpager_index_lines=4
比如我留下4行显示列表,其它的用来显示正文:mutt-indexpager
27.subscribe
告诉Mutt你已经订阅了那些邮件列表(mailing-list).这有助于Mutt判断那些信件是邮件列表转过来的,避免你错误的回复到别人的私人信箱。也避免别人回复到你的私人信箱。
中文FAQ
2.怎样让Mutt显示日期等为中文?
setlocale="zh_CN"
3.发出的信件为什么设置了错误的charset?别人的程序不能正确显示我的中文信件!
把gb2312编码加到你的send_charset.就像这样最好:
setsend_charset="us-ascii:iso-8859-1:gb2312:utf-8"
4.收到一些中文信件全部显示为"???"
这是因为某些email客户端,比如清华大学的WWW界面客户端没有设置字符编码,你看看邮件头(按h),是不是有个
Content-Type:text/plain
但是后面没有说charset="GB2312"?Mutt遇到这种没有设置charset的邮件就会使用"us-ascii",所以如果你想让这种信件可以正确显示,就把"us-ascii"设置为"gb2312"的别名:
charset-hook^us-ascii$gb2312
注意"us-ascii"中间的连字号!
5.可是仍然有邮件标题乱码呢!
看看你的$spool里那个乱码的信件是不是有类似如下内容:
Subject:=?iso8859-1?B?U29oddCj09HCvDq587Dg09DQwrPJ1LG808jro6E=?=
Chinaren等服务器发出来的信件使用了quoted-printable的subject,而且设置编码为"iso8859-1",这显然是错误的。
对付这个错误的办法是把iso-8859-1变成gb2312的别名:
charset-hook^iso-8859-1$gb2312
注意"iso-8859-1"中间的连字号!
如果仍然有信件乱码。干脆用
charset-hook.*gb2312
把所有信件都用gb2312显示。
6.可是这样设置之后evolution发过来的subject为utf-8编码的邮件标题乱码!
那就把不是utf-8的编码都映射到gb2312:
charset-hook!utf-8gb2312
7.怎样配置fetchmail?
fetchmail的配置非常简单。如果只是一个人用的话,可以这样设置:比如,我在我的$HOME目录编辑了一个.fetchmailrc:
setdaemon60
pollmails.tsinghua.edu.cn
protocolPOP3
user"wang-y01"
password"wang-y01的密码"
pollsmth.org
....
....
然后把fetchmail写到我的shell启动脚本里:
!psaux|grep-qfetchmail&&fetchmail&
fetchmail启动后成为一个daemon,每分种帮我检查所有邮箱里的邮件,收回来,并且转发到本地信箱。修改上面那个"60"就可以改变检查时间间隔。
如果不想让fetchmail删除服务器上的文件,而且每次只取新的信。就在配置文件里加上:
uidl
8.我不想用fetchmail,能不能直接收回POP信件啊?
如果你的Mutt编译时加入了POP功能,那么你可以直接从POP服务器收邮件而不用借助于fetchmail.把类似这些行加入~/.muttrc
setpop_user=wang-y01
setpop_pass="wang-y01的密码"
setpop_host="pop://mails.tsinghua.edu.cn"
也可以一次性输入所有内容:
setpop_host="pop://wang-y01:wang-y01的密码@smth.org"
在Mutt里按一下"G"就可以取邮件了。
9.怎样处理多个POP3信箱?
如果你有多个POP信箱,你可以设置一些方便的宏把POP信件收到你信箱里。举个例子,就像我这样:
macroindex,shredder":setpop_host=\
\"pop://shredder:shredder的密码@smth.org\"\r\"
macroindex,sk8er":setpop_host=\
\"pop://sk8er:sk8er的密码@smth.org\"\r\"
macroindex,ts":setpop_host=\
\"pop://wang-y01:wang-y01的密码@mails.tsinghua.edu.cn\"\r\"
macroindex,g",shredder,sk8er,ts"
这样,我只要按,shredder就可以收我在smth上shredder的信件,只要按,sk8er就可以收我在smth上sk8er的信件,只要按,ts就可以收mails.tsinghua.edu.cn的信件,只要按,g就可以收取我所有POP信箱的信件了。
10.怎样直接访问POP3信箱?
除了上面的方法,你还可以直接访问POP3信箱。比如,我可以直接按"c"切换到信箱pop://sk8er:sk8er的密码@smth.org
就可以浏览pop的信件了。切换到其它信箱就浏览不同的pop。如果你嫌按键太多可以自己定义一个宏。这是同步操作,你如果在这个信箱里删除一封信件,mutt就会删除你pop3服务器上的信件。你不删它也不删。
邮件太多时这样效率很低,每次都要取所有邮件头,就像Foxmail的“远程邮件管理”。所以最好在那种不想取回信件,而想直接删除垃圾邮件的时候用这个办法。
11.怎样处理邮件列表?
参看subscribe命令。
12.我按"d"的时候邮件被直接标记删除了,怎样才能把删掉的信件都移到一个“垃圾箱”呢?
你只要把信件用save-message函数保存到你的垃圾箱,比如~/Mail/Trash,信件会被自动做上"D"(删除)标志。为了让"d"可以保存到垃圾箱,你可以把"d"键绑定到一个宏。但是如果你要删除垃圾箱里的邮件,这个宏会再次把垃圾箱的邮件存储到垃圾箱,产生循环。所以你应该使用folder-hook在垃圾箱里把"d"恢复到原来的delete-message函数,而在其它信箱使用那个宏。
现在你可以用以下设置得到一个“垃圾箱”的功能。第一次按"d"时有可能会被讯问是否建立这个信箱(Trash).
folder-hook.'macroindexd"~/Mail/Trash\r"'
folder-hook~/Mail/Trash'bindindexddelete-message'
13.当收到的邮件的header有很多项目时,我的pager里全都是邮件头。怎样才能只看到某些我想看的邮件头呢?
你可以用ignore忽略你不想看到的邮件头,如果ignore*,你就可以忽略所有邮件头。用unignore可以恢复显示被忽略的邮件头。所以一个简单的办法就是先把所有邮件头忽略,然后放出你想看的那几个。
看下面的设置。我的sent.*(发件箱)里只显示To:Subject:Date:三项。而在其它信箱就显示From:Subject:X-Mailer:Date:这几项。
folder-hook."ignore*;unignorefromsubjectX-mailerdate"
folder-hooksent.*"ignore*;unignoretosubjectdate"
你还可以指定邮件头显示的顺序:
hdr_orderfromtosubjectdate
14.Mutt怎么使用地址簿呢?
你可以用alias来实现一个地址簿。alias命令的形式是这样的,举个例子:
aliaswyWangYin<邮箱>
alias是命令,wy是别名,WangYin<邮箱>是一个标准的email地址。这样,如果你在index里按"m",在To:的提示下输入"wy",就可以发信给WangYin<邮箱>。
在To:的提示下按Tab就可以显示联系人列表,然后你可以移动光标选择联系人。
如果你有很多alias要写,最好把它们写到另外一个文件,比如叫.mutt.alias.然后在.muttrc里加上:
source~/.mutt.alias
你还可以设置一个变量:
setalias_file=~/.mutt.alias
这样你在index里按"a",就可以把来信人加入到这个alias文件了。
15.Mutt如何处理HTML附件?
Mutt可以处理任何类型的附件。因为它可以调用合适的程序来处理它们。为了直接在mutt的窗口里显示HTML,你只需要在~/.mailcap文件加入。
16.Mutt如何处理Worddoc附件。
清华大学总是喜欢发送含有doc附件的通知。真是让人ft。现在有一个完美的解决方案了:使用wvware把doc转成HTML嵌入mutt里。
wvHtml--charset=gb2312your.docyour.html
就可以把doc转成HTML。经测试,能够正确处理汉字和图片。
你可以让mutt调用wvHtml在自己的窗口里直接显示转换的doc文档。只需要在~/.mailcap文件加入:
application/msword;wvHtml--charset=gb2312%s-|lynx--dump-stdin;
nametemplate=%s.html;copiousoutput
auto_viewtext/htmlapplication/msword
这样你的mutt看一个doc的时候就像这个样子:
mutt-wvware
17.我想在Mutt里使用Emacs怎么办?
Emacs是一个非常强大的编辑器,所以你肯定会希望能在Mutt里使用Emacs。你可以选择两种方式:
参考资料