特點
* 超強的信件分類功能
你可以設定幾乎任意的條件來從一堆信件里找到你所需要的那封。比如,你可以說:“只顯示一個月之類,不是清華大學發來的,內容包含‘光碟’兩個字的信件”,“把從
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的列表顯示。它的預設定義是:
set index_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 鍵,這些信箱就可供你選擇。
mailboxes Mailbox sent-mail
5. header
這是一個 bool 型變數。它表明你在回信時引用原文是否加入原文的郵件頭。
set header=no
6. quit
mutt-quit
可以設定為 yes, no, ask-yes, 或者 ask-no. 這是說,當你按q退出時,是否提示你(ask-yes,ask-no),還是直接就退出了(yes),還是根本不理你(no)。
set quit=ask-yes
7. auto_view
那些類型的附屬檔案是允許直接通過 .mailcap 瀏覽的?
auto_view text/html
8. move
這也是一個提示性變數。它是確定當你退出時,是否提示你把信件從 spool 移動到的 mbox 檔案。
set move=no
9. ascii_chars
當 Mutt 用 thread 方式顯示時,是否用純 ascii 表示樹狀列表。
set ascii_chars=yes
如果設定了就是這個樣子:
mutt-ascii
10. include
回信時是否包含原文。
set include
11. indent_str
回信的引文之前插入那個符號?
set indent_str="> "
12. my_hdr
設定你自己的郵件頭。
13. 打分
新信件+4分,爸爸(w2r007)發來的 +2,主題包含“通知”的+2,主題包含 “Circulation” +3, 已經標記刪除的 -5,上次沒有讀的 +1,包含 “believe”的 -10(垃圾廣告!)。
score "~N" +4
score "~f w2r007" +2
score "~s 通知" +2
score "~s Circulation" +3
score "~D" -5
score "~O" +1
score "~s believe" -10
14. sort
排序方式。可以是
date
date-sent
date-received
from
mailbox-order (unsorted)
score
size
subject
threads
to
幾種方式,每種方式可以在前面加一個 "reverse-" 前綴表示反方向排序。我一般按分數排序:
set sort=score
15. sort_aux
當用 thread 排序方式時,我們對各個 thread 的相對排序順序。
set sort_aux=date
16. pager_stop
如果設定,那么你在pager(就是你看信的內容的視窗里)翻頁時,如果翻到最後,再按往下翻也不會翻到下一封信件。如果不設定就會自動翻到下一封信。
set pager_stop
17. fast_reply
如果設定,當你按 "r" 回信時,就不會再提示你輸入回信地址和主題,直接進入編輯模式。
set fast_reply
18. resolve
當你按 "t" 或者 "D" 之類的標記操作時,是否自動把游標移動到下一封信件。
set resolve=yes
19. alias_file
當你在 index 里按 "a" 為來信者取別名時,使用哪一個別名檔案保存這個別名。
set alias_file=/home/wy/.mutt.alias
20. record
你發出的郵件保存到那個信箱檔案?比如可以像我這樣每個月發出的信件放在不同的檔案里。
set record="~/Mail/=sent-mail-`date +%Y-%m`"
21. charset
你的終端支持哪一種編碼的顯示?這個必須和你的終端編碼一樣。
set charset="gb2312"
22. send_charset
發信時可以使用的字元集。只有當前面的字元集不能正確表示信件內容時才會使用後面的。比如,如果你像下面這樣設定,你的信件如果全是英文,那么信件就會被設定為 us-ascii 編碼,如果出現了法語字元,那么就會用 iso-8859-1,如果出現了漢字就會用 gb2312,如果以上都不是,那么就用 utf-8。
set send_charset="us-ascii:iso-8859-1:gb2312:utf-8"
23. wait_key
當外部程式退出時,是否要求用戶按一個鍵才返回。這在察看某些shell命令輸出時是比要的,否則它們一下就消失了。
set wait_key=yes
24. confirmappend
當你要把信件存到另一個信箱,而這個信箱已經存在時,是否提示附加?
set noconfirmappend
25. edit_headers
是否把郵件頭也放在編輯器里可以修改?
set edit_headers=no
26. pager_index_lines
當你在用 pager 看信件時,在 index 留出多少行顯示
郵件列表?
set pager_index_lines=4
比如我留下4行
顯示列表,其它的用來顯示正文: mutt-indexpager
27. subscribe
告訴 Mutt 你已經訂閱了那些郵件列表(mailing-list). 這有助於 Mutt 判斷那些信件是郵件列錶轉過來的,避免你錯誤的回覆到別人的私人信箱。也避免別人回復到你的私人信箱。
中文FAQ
2. 怎樣讓 Mutt 顯示日期等為中文?
set locale="zh_CN"
3. 發出的信件為什麼設定了錯誤的 charset?別人的程式不能正確顯示我的中文信件!
把 gb2312 編碼加到你的 send_charset. 就像這樣最好:
set send_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-8 gb2312
7. 怎樣配置 fetchmail?
fetchmail 的配置非常簡單。如果只是一個人用的話,可以這樣設定:比如,我在我的 $HOME 目錄編輯了一個 .fetchmailrc:
set daemon 60
poll mails.tsinghua. edu. cn
protocol POP3
user "wang-y01"
password "wang-y01的密碼"
poll smth. org
....
....
然後把 fetchmail 寫到我的shell啟動腳本里:
! ps aux | grep -q fetchmail && fetchmail &
fetchmail 啟動後成為一個 daemon, 每分種幫我檢查所有信箱里的郵件,收回來,並且轉發到本地信箱。修改上面那個 "60" 就可以改變檢查時間間隔。
如果不想讓 fetchmail 刪除伺服器上的檔案,而且每次只取新的信。就在配置檔案里加上:
keep
8. 我不想用 fetchmail,能不能直接收回 POP 信件啊?
如果你的 Mutt 編譯時加入了 POP 功能,那么你可以直接從 POP 伺服器收郵件而不用藉助於 fetchmail. 把類似這些行加入 ~/.muttrc
set pop_user=wang-y01
set pop_pass="wang-y01的密碼"
set pop_host="pop://mails.tsinghua. edu. cn"
也可以一次性輸入所有內容:
set pop_host="pop://wang-y01:wang-y01的密碼@smth. org"
在 Mutt 里按一下 "G" 就可以取郵件了。
9. 怎樣處理多個 POP3 信箱?
如果你有多個POP信箱,你可以設定一些方便的宏把POP信件收到你信箱裡。舉個例子,就像我這樣:
macro index ,shredder ":set pop_host=\
\"pop://shredder:shredder的密碼@smth. org\"\r\
<fetch-mail>"
macro index ,sk8er ":set pop_host=\
\"pop://sk8er:sk8er的密碼@smth. org\"\r\
<fetch-mail>"
macro index ,ts ":set pop_host=\
\"pop://wang-y01:wang-y01的密碼@mails.tsinghua. edu. cn\"\r\
<fetch-mail>"
macro index ,g ",shredder,sk8er,ts"
這樣,我只要按 ,shredder 就可以收我在 smth 上 shredder 的信件,只要按 ,sk8er 就可以收我在 smth 上 sk8er 的信件,只要按 ,ts 就可以收 mails.tsinghua.e du. 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 . 'macro index d "~/Mail/Trash\r"'
folder-hook ~/Mail/Trash 'bind index d delete-message'
13. 當收到的郵件的 header 有很多項目時,我的 pager 里全都是郵件頭。怎樣才能只看到某些我想看的郵件頭呢?
你可以用 ignore 忽略你不想看到的郵件頭,如果 ignore *,你就可以忽略所有郵件頭。用 unignore 可以恢復顯示被忽略的郵件頭。所以一個簡單的辦法就是先把所有郵件頭忽略,然後放出你想看的那幾個。
看下面的設定。我的 sent.*(發件箱) 里只顯示 To: Subject: Date: 三項。而在其它信箱就顯示 From: Subject: X-Mailer: Date: 這幾項。
folder-hook . "ignore *; unignore from subject X-mailer date"
folder-hook sent.* "ignore *; unignore to subject date"
你還可以指定郵件頭顯示的順序:
hdr_order from to subject date
14. Mutt 怎么使用地址簿呢?
你可以用 alias 來實現一個地址簿。alias 命令的形式是這樣的,舉個例子:
alias wy Wang Yin <信箱>
alias 是命令,wy 是別名,Wang Yin <信箱> 是一個標準的 email 地址。這樣,如果你在 index 里按 "m",在 To: 的提示下輸入 "wy",就可以發信給 Wang Yin <信箱> 。
在 To: 的提示下按 Tab 就可以顯示聯繫人列表,然後你可以移動
游標選擇聯繫人。
如果你有很多 alias 要寫,最好把它們寫到另外一個檔案,比如叫 .mutt.alias. 然後在 .muttrc 里加上:
source ~/.mutt.alias
你還可以設定一個變數:
set alias_file=~/.mutt.alias
這樣你在 index 里按 "a",就可以把來信人加入到這個 alias 檔案了。
15. Mutt 如何處理 HTML 附屬檔案?
Mutt 可以處理任何類型的附屬檔案。因為它可以調用合適的程式來處理它們。為了直接在 mutt 的視窗里顯示 HTML,你只需要在 ~/.mailcap 檔案加入:
text/html; lynx --dump %s; nametemplate=%s.html; copiousoutput
在 ~/.muttrc 加入:
auto_view text/html
16. Mutt 如何處理 Word doc 附屬檔案。
清華大學總是喜歡傳送含有 doc 附屬檔案的通知。真是讓人ft。現在有一個完美的解決方案了:使用 wvware 把 doc 轉成 HTML 嵌入mutt里。
wvHtml --charset=gb2312 your.doc your.html
就可以把doc轉成 HTML。經測試,能夠正確處理漢字和圖片。
你可以讓mutt調用 wvHtml 在自己的視窗里直接顯示轉換的 doc 文檔。只需要在 ~/.mailcap 檔案加入:
application/msword; wvHtml --charset=gb2312 %s - | lynx --dump -stdin;
nametemplate=%s.html; copiousoutput
text/html; lynx --dump %s; nametemplate=%s.html; copiousoutput
在 ~/.muttrc 加入:
auto_view text/html application/msword
這樣你的 mutt 看一個 doc 的時候就像這個樣子:
mutt-wvware
17. 我想在 Mutt 里使用 Emacs 怎么辦?
Emacs 是一個非常強大的編輯器,所以你肯定會希望能在 Mutt 里使用 Emacs。你可以選擇兩種方式:
1. 一種方式是直接在 Mutt 的終端里使用非圖形界面的 Emacs (emacs -nw)。 你只需要在 .muttrc 設定: set editor="emacs -nw" 這樣會啟動一個新的 Emacs。如果你的 Emacs 配置加入了大量擴展,這個啟動時間是相當長的,你不希望每回一封email就等上10秒等Emacs啟動吧? 有一個辦法可以跳過冗長的 Emacs 擴展。只需要把你的 .emacs 里耗時的部分放在一個條件語句里。比如,我就把 desktop 和 session 放在了一個條件語句里啟動。如果知道編輯的檔案名稱叫做 "/tmp/mutt-..." 那我們就知道是 mutt 在調用 Emacs,所以我就不載入 desktop 和 session 這種費時間又沒用的東西。 (unless (catch 'found (dolist (arg command-line-args) (if (string-match "^/tmp/mutt-" arg) (throw 'found t)))) ;; load desktop (load "desktop") (desktop-load-default) (desktop-read) ;; load session (require 'session) (add-hook 'after-init-hook 'session-initialize) (setq desktop-globals-to-save '(desktop-missing-file-warning)) ;; start server (server-start) ) |
2. 一種方式是使用 emacsclient 傳送到 GUI 的 Emacs 伺服器編輯。 這種方式可以使用一個已經啟動的 Emacs,啟動非常快速。但是我不是很喜歡這種方式,因為我不想離開 Mutt 的終端到 Emacs 的視窗,編輯完了還要切換視窗。看這幅圖。 先來看看 Emacs 的設定,啟動 Emacs 後,你可以使用 server-start 啟動 Emacs 伺服器。你也可以把 (server-start) 加入到你的 .emacs 檔案,這樣 Emacs 啟動時自動就啟動了伺服器。 在 .muttrc 里加入 set editor=emacsclient 這樣 Mutt 在要傳送郵件時,就把需要編輯的東西送到已經啟動的 Emacs 里。編輯完了之後你按 C-x #,控制會轉回到 Mutt. |