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。你可以選擇兩種方式:
參考資料 >