特點
* 超強的信件分類功能你可以設定幾乎任意的條件來從一堆信件里找到你所需要的那封。比如,你可以說:“只顯示一個月之類,不是清華大學發來的,內容包含‘光碟’兩個字的信件”,“把從 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
uidl
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\
"
macro index ,sk8er ":set pop_host=\
\"pop://sk8er:sk8er的密碼@smth. org\"\r\
"
macro index ,ts ":set pop_host=\
\"pop://wang-y01:wang-y01的密碼@mails.tsinghua. edu. cn\"\r\
"
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. |