"All mail clients suck. This one just sucks less." -me, circa 1995
你也許聽說過這句話?這不是危言聳聽,我還沒有遇到一個令我滿意的 email 程序,直到我遇到 mutt。它不是圖形界面的,但是它非常強大和方便。我曾經(jīng)把它忽略,但是后來我發(fā)現(xiàn)其它 email 程序都有某種我不喜歡的怪毛病。最后我選擇了 Mutt。
有人說 Gnus 才是最好的 email 客戶端,可是 Gnus 要達到 Mutt 這種效果和方便程度,你需要付出太多代價。所以我寧愿使用 Mutt 調(diào)用 Emacs 來編輯 email 而不愿把 Gnus 配置來處理 email.
mutt 具有以下特點:
你可以設(shè)置幾乎任意的條件來從一堆信件里找到你所需要的那封。比如,你可以說:“只顯示一個月之類,不是清華大學(xué)發(fā)來的,內(nèi)容包含‘光盤’兩個字的信件”,“把從 fvwm 郵件列表一個星期以前發(fā)來的,而且還沒有看過的信件全部移到叫 old-fvwm 的信箱”……
你可以給你的信件打分,比如我說:
信件最后的得分就是它的這些分數(shù)相加的結(jié)果。這樣處理之后,你最想看的信件肯定就在最上面了。
你看我的 Mutt 可以變成這個樣子。當然這太花了,我不會設(shè)置這么多顏色的 :)
這個功能類似 Emacs。你可以把幾乎任意的功能綁定到鍵盤。你可以讓 Mutt 的行為變成你喜歡的編輯器。比如我習(xí)慣了 VIM 的控制方式,我就把 "gg" 綁定到 "first-entry", 把 "G" 綁定到 "last-entry", 把 "Ctrl-F" 綁定到 next-page, 把 "Ctrl-B" 綁定到 previous-page.
你可以對滿足不同條件的信件,信箱采取不同的設(shè)置。比如,對于用來收郵件的那些信箱,顯示郵件時只顯示 from, date, subject, x-mailer 這幾個郵件頭,而對 sent-mail 信箱還顯示 to 這個郵件頭;發(fā)給我家人,朋友的信件都存到一個特別的信箱中保存。
你可以把一些郵件作上標記(tag),然后對它們進行同意操作,比如刪除,存到其它文件,刪除附件,……
用一個強大的編輯器來編輯你的 email 你才能高效的完成編輯。一般 email 客戶端都是用的自己內(nèi)嵌的編輯器,這些編輯器一般功能很弱。mutt 并沒有試圖自己寫一個編輯器,因為它明顯不可能超過 VIM 和 Emacs, 所以 mutt 可以讓你自己選擇你喜歡的編輯器,它會去調(diào)用它,并且設(shè)置很多方便編輯 email 的參數(shù)。編輯器編輯完畢后 mutt 會從編輯器得到編輯好的文本,然后你可以加附件什么的。我現(xiàn)在在 mutt 里使用 Emacs 編輯器。
Mutt 不像一般的 email 程序那樣直接支持打開某些種類的附件。因為附件的種類實在太多,一個 email 客戶端沒有可能自己實現(xiàn)所有的功能。所以 Mutt 提供了 .mailcap 的設(shè)置。你可以啟用你最喜歡的程序來打開某種特定類型的附件。比如,我可以讓 lynx 幫我把含有 HTML 附件的信件都轉(zhuǎn)成文本在 Mutt 里顯示,我讓 ImageMagick 的 display 程序幫我顯示圖片……
Mutt 可以利用 GnuPG 這樣的程序來對信件進行 PGP 加密和數(shù)字簽名。別人可以用你的公用密鑰給你發(fā)一封只有你才能看到的信件。你也可以用你的私有密鑰給信件“簽名”,收到信的人可以用你公布的公鑰驗證這封信確實是你發(fā)出來的。
聽了上面那么多好處之后,還有比這更好的消息嗎?
Mutt 的主頁在 http://www.mutt.org。上面有所有源程序和說明文檔。
Mutt 顯然是一個 Unix 的郵件程序,它跟一般的 Windows 郵件程序不同,它不是一個包羅萬象的大雜燴。你甚至?xí)l(fā)現(xiàn)它根本不直接發(fā)出郵件,它從來不自己編輯郵件,它從來不自己對郵件進行加密和數(shù)字簽名……
Mutt 更像一個文件管理器,只不過它管理的是email。它的功能是借助各個最強大的程序來實現(xiàn)的。這符合 UNIX 的設(shè)計思想。
是不是覺得挺麻煩?其實有些 patch 可以使 Mutt 不依賴于這些程序,而自己處理收發(fā)工作。但是,強烈建議你使用這些外部程序!到時候你就知道這些東西的好處了。首先,VIM, sendmail, fetchmail 這些程序都是經(jīng)過千錘百煉的質(zhì)量信得過的程序,用它們編輯,發(fā)送,收取郵件你絕對放心。其次,你得到了一個 UNIX 網(wǎng)絡(luò)工作站的功能:
Mutt 的用法類似 VIM。你的每一個鍵都是一個命令,你可以在配置文件~/.muttrc設(shè)置很多選項來改變 Mutt 的行為。我沒有太多時間寫一個入門的介紹。你可以自己看看 Mutt Manual。我下面只解決一些中國人用 Mutt 常常遇到的問題。
你一開始看到 Mutt 說明書上說的配置方法可能不知所措。現(xiàn)在我把你開始用的時候需要的一些必要的配置說一下。
這個變量應(yīng)該設(shè)置為一個正則表達式,它是你有可能收到信件的地址。比如我的很簡單,只有一個地址:
set alternates="wang-y01@mails.tsinghua.edu.cn"
這個變量有助于 Mutt 顯示郵件的地址特征。一般 Mutt 會在index中顯示幾種不同的郵件地址特征,它們是由 $to_chars 變量指定的。
一般 $to_chars 的定義為 " +TCFL".
你看看下面這幅圖,就是mutt 有可能出現(xiàn)的一種列表,你看到地址特征沒有?實際上地址特征出現(xiàn)在列表中的位置是可以改變的。待會兒在 $index_format 里你會看到的。
這是一個格式字符串,用來控制你的index的列表顯示。它的缺省定義是:
set index_format="%4C %Z %{%b %d} %-15.15L (%4l) %s"
顯示出來就是這個樣子:
這里有一個簡單的對應(yīng)關(guān)系,%4C表示4位數(shù)的序號,%Z是郵件狀態(tài),你看到那個 "r" 了嗎?也就是說我已經(jīng)回了這封信。%Z 還包含那個 "T", 也就是說這封信不只是寄給我一個人的,我爸爸每次寄信都會CC他自己一份 :) %{%b %d} 是日期格式,它是由 strftime() 函數(shù)的格式定義的。這里 %b 就是根據(jù)當前的 locale 設(shè)置的月份簡稱,“12月”。%d 就是十進制表示的每月的日號,“31”。后面的……你自己看看manual吧,我不羅嗦了。
指定你有那些信箱文件。當你按 "c" 切換信箱時,再按 Tab 鍵,這些信箱就可供你選擇。
mailboxes Mailbox sent-mail
這是一個 bool 型變量。它表明你在回信時引用原文是否加入原文的郵件頭。
set header=no
可以設(shè)置為 yes, no, ask-yes, 或者 ask-no. 這是說,當你按q退出時,是否提示你(ask-yes,ask-no),還是直接就退出了(yes),還是根本不理你(no)。
set quit=ask-yes
那些類型的附件是允許直接通過 .mailcap 瀏覽的?
auto_view text/html
這也是一個提示性變量。它是確定當你退出時,是否提示你把信件從 spool 移動到的 mbox 文件。
set move=no
當 Mutt 用 thread 方式顯示時,是否用純 ascii 表示樹狀列表。
set ascii_chars=yes
如果設(shè)置了就是這個樣子:
回信時是否包含原文。
set include
回信的引文之前插入那個符號?
set indent_str="> "
設(shè)置你自己的郵件頭。比如我想讓信件看上去是從 wang-y01@mails.tsinghua.edu.cn 發(fā)出的,而不是從 wy@wangyin.com 發(fā)出的。因為 wangyin.com 是我自己設(shè)置的主機名,不是注冊的合法域名。我想讓別人看到我的信是從我的清華信箱發(fā)出的,讓他們直接回信到我的清華信箱,就這么干:
my_hdr From: wang-y01@mails.tsinghua.edu.cn
新信件+4分,爸爸(w2r007)發(fā)來的 +2,主題包含“通知”的+2,主題包含 “Circulation” +3, 已經(jīng)標記刪除的 -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
排序方式??梢允?
date date-sent date-received from mailbox-order (unsorted) score size subject threads to幾種方式,每種方式可以在前面加一個 "reverse-" 前綴表示反方向排序。我一般按分數(shù)排序:
set sort=score
當用 thread 排序方式時,我們對各個 thread 的相對排序順序。
set sort_aux=date
如果設(shè)置,那么你在pager(就是你看信的內(nèi)容的窗口里)翻頁時,如果翻到最后,再按往下翻也不會翻到下一封信件。如果不設(shè)置就會自動翻到下一封信。
set pager_stop
如果設(shè)置,當你按 "r" 回信時,就不會再提示你輸入回信地址和主題,直接進入編輯模式。
set fast_reply
當你按 "t" 或者 "D" 之類的標記操作時,是否自動把光標移動到下一封信件。
set resolve=yes
當你在 index 里按 "a" 為來信者取別名時,使用哪一個別名文件保存這個別名。
set alias_file=/home/wy/.mutt.alias
你發(fā)出的郵件保存到那個信箱文件?比如可以像我這樣每個月發(fā)出的信件放在不同的文件里。
set record="~/Mail/=sent-mail-`date +%Y-%m`"
你的終端支持哪一種編碼的顯示?這個必須和你的終端編碼一樣。
set charset="gb2312"
發(fā)信時可以使用的字符集。只有當前面的字符集不能正確表示信件內(nèi)容時才會使用后面的。比如,如果你像下面這樣設(shè)置,你的信件如果全是英文,那么信件就會被設(shè)置為 us-ascii 編碼,如果出現(xiàn)了法語字符,那么就會用 iso-8859-1,如果出現(xiàn)了漢字就會用 gb2312,如果以上都不是,那么就用 utf-8。
set send_charset="us-ascii:iso-8859-1:gb2312:utf-8"
當外部程序退出時,是否要求用戶按一個鍵才返回。這在察看某些shell命令輸出時是比要的,否則它們一下就消失了。
set wait_key=yes
當你要把信件存到另一個信箱,而這個信箱已經(jīng)存在時,是否提示附加?
set noconfirmappend
是否把郵件頭也放在編輯器里可以修改?
set edit_headers=no
當你在用 pager 看信件時,在 index 留出多少行顯示郵件列表?
set pager_index_lines=4
比如我留下4行顯示列表,其它的用來顯示正文:
告訴 Mutt 你已經(jīng)訂閱了那些郵件列表(mailing-list). 這有助于 Mutt 判斷那些信件是郵件列表轉(zhuǎn)過來的,避免你錯誤的回復(fù)到別人的私人信箱。也避免別人回復(fù)到你的私人信箱。
subscribe fvwm@fvwm.org
之后,收到的 To: 是 fvwm@fvwm.org 的信件看起來是這樣:
地址前面那個 "L" 表示這是一個郵件列表轉(zhuǎn)過來的。你看到以后就不要按 "r" 回信,這樣會回到別人的私人信箱去。按 "L",就可以回復(fù)到郵件列表地址,這里就是 fvwm@fvwm.org。
以下是一些常見問題和解決方法。很多是我遇到的一些不能直接連接國外網(wǎng)絡(luò),沒有自己的域名和郵件服務(wù)器的人遇到的問題。
用 my_hdr 把你的 From: 設(shè)置為你想要的地址就行了。比如我是這樣設(shè)置的:
my_hdr From: wang-y01@mails.tsinghua.edu.cn
注意 From: 的冒號之后有空格!
set locale="zh_CN"
把 gb2312 編碼加到你的 send_charset. 就像這樣最好:
set send_charset="us-ascii:iso-8859-1:gb2312:utf-8"
這是因為某些 email 客戶端,比如清華大學(xué) mails.tsinghua.edu.cn 的WWW界面客戶端 沒有設(shè)置字符編碼,你看看郵件頭(按h),是不是有個
Content-Type: text/plain
但是后面沒有說 charset="GB2312"? Mutt 遇到這種沒有設(shè)置 charset 的郵件就會使用 "us-ascii",所以如果你想讓這種信件可以正確顯示,就把 "us-ascii" 設(shè)置為 "gb2312" 的別名:
charset-hook ^us-ascii$ gb2312
注意 "us-ascii" 中間的連字號!
看看你的 $spool 里那個亂碼的信件是不是有類似如下內(nèi)容:
Subject: =?iso8859-1?B?U29oddCj09HCvDq587Dg09DQwrPJ1LG808jro6E=?=
Chinaren 等服務(wù)器發(fā)出來的信件使用了 quoted-printable 的 subject,而且設(shè)置編碼為 "iso8859-1",這顯然是錯誤的。
對付這個錯誤的辦法是把 iso-8859-1 變成 gb2312 的別名:
charset-hook ^iso-8859-1$ gb2312
注意 "iso-8859-1" 中間的連字號!
如果仍然有信件亂碼。干脆用
charset-hook .* gb2312
把所有信件都用 gb2312 顯示。
那就把不是 utf-8 的編碼都映射到 gb2312:
charset-hook !utf-8 gb2312
fetchmail 的配置非常簡單。如果只是一個人用的話,可以這樣設(shè)置:比如,我在我的 $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, 每分種幫我檢查所有郵箱里的郵件,收回來,并且轉(zhuǎn)發(fā)到本地信箱。修改上面那個 "60" 就可以改變檢查時間間隔。
如果不想讓 fetchmail 刪除服務(wù)器上的文件,而且每次只取新的信。就在配置文件里加上:
keep uidl
如果你的 Mutt 編譯時加入了 POP 功能,那么你可以直接從 POP 服務(wù)器收郵件而不用借助于 fetchmail. 把類似這些行加入 ~/.muttrc
set pop_user=wang-y01 set pop_pass="wang-y01的密碼" set pop_host="pop://mails.tsinghua.edu.cn"
也可以一次性輸入所有內(nèi)容:
set pop_host="pop://wang-y01:wang-y01的密碼@smth.org"
在 Mutt 里按一下 "G" 就可以取郵件了。
如果你有多個POP信箱,你可以設(shè)置一些方便的宏把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.edu.cn 的信件,只要按 ,g 就可以收取我所有 POP 信箱的信件了。
除了上面的方法,你還可以直接訪問 POP3 信箱。比如,我可以直接按 "c" 切換到信箱 pop://sk8er:sk8er的密碼@smth.org
就可以瀏覽 pop 的信件了。切換到其它信箱就瀏覽不同的 pop。如果你嫌按鍵太多可以自己定義一個宏。這是同步操作,你如果在這個信箱里刪除一封信件,mutt 就會刪除你 pop3 服務(wù)器上的信件。你不刪它也不刪。
郵件太多時這樣效率很低,每次都要取所有郵件頭,就像 Foxmail 的“遠程郵件管理”。所以最好在那種不想取回信件,而想直接刪除垃圾郵件的時候用這個辦法。
參看subscribe命令。
你只要把信件用 save-message 函數(shù)保存到你的垃圾箱,比如 ~/Mail/Trash,信件會被自動做上 "D"(刪除) 標志。為了讓 "d" 可以保存到垃圾箱,你可以把 "d" 鍵綁定到一個 宏。但是如果你要刪除垃圾箱里的郵件,這個宏會再次把垃圾箱的郵件存儲到垃圾箱,產(chǎn)生循環(huán)。所以你應(yīng)該使用 folder-hook 在垃圾箱里把 "d" 恢復(fù)到原來的 delete-message 函數(shù),而在其它信箱使用那個宏。
現(xiàn)在你可以用以下設(shè)置得到一個“垃圾箱”的功能。第一次按 "d" 時有可能會被訊問是否建立這個信箱(Trash).
folder-hook . ‘macro index d "~/Mail/Trash\r"‘ folder-hook ~/Mail/Trash ‘bind index d delete-message‘
你可以用 ignore 忽略你不想看到的郵件頭,如果 ignore *,你就可以忽略所有郵件頭。用 unignore 可以恢復(fù)顯示被忽略的郵件頭。所以一個簡單的辦法就是先把所有郵件頭忽略,然后放出你想看的那幾個。
看下面的設(shè)置。我的 sent.*(發(fā)件箱) 里只顯示 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
你可以用 alias 來實現(xiàn)一個地址簿。alias 命令的形式是這樣的,舉個例子:
alias wy Wang Yin <wang-y01@mails.tsinghua.edu.cn>
alias 是命令,wy 是別名,Wang Yin <wang-y01@mails.tsinghua.edu.cn> 是一個標準的 email 地址。這樣,如果你在 index 里按 "m",在 To: 的提示下輸入 "wy",就可以發(fā)信給 Wang Yin <wang-y01@mails.tsinghua.edu.cn> 。
在 To: 的提示下按 Tab 就可以顯示聯(lián)系人列表,然后你可以移動光標選擇聯(lián)系人。
如果你有很多 alias 要寫,最好把它們寫到另外一個文件,比如叫 .mutt.alias. 然后在 .muttrc 里加上:
source ~/.mutt.alias
你還可以設(shè)置一個變量:
set alias_file=~/.mutt.alias
這樣你在 index 里按 "a",就可以把來信人加入到這個 alias 文件了。
Mutt 可以處理任何類型的附件。因為它可以調(diào)用合適的程序來處理它們。為了直接在 mutt 的窗口里顯示 HTML,你只需要在 ~/.mailcap 文件加入:
text/html; lynx --dump %s; nametemplate=%s.html; copiousoutput在 ~/.muttrc 加入:
auto_view text/html
清華大學(xué)總是喜歡發(fā)送含有 doc 附件的通知。真是讓人ft?,F(xiàn)在有一個完美的解決方案了:使用 wvware 把 doc 轉(zhuǎn)成 HTML 嵌入mutt里。
wvware 可以在 http://www.wvware.com免費得到。
wvHtml --charset=gb2312 your.doc your.html就可以把doc轉(zhuǎn)成 HTML。經(jīng)測試,能夠正確處理漢字和圖片。
你可以讓mutt調(diào)用 wvHtml 在自己的窗口里直接顯示轉(zhuǎn)換的 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 的時候就像這個樣子:
Emacs 是一個非常強大的編輯器,所以你肯定會希望能在 Mutt 里使用 Emacs。你可以選擇兩種方式:
你只需要在 .muttrc 設(shè)置:
set editor="emacs -nw"這樣會啟動一個新的 Emacs。如果你的 Emacs 配置加入了大量擴展,這個啟動時間是相當長的,你不希望每回一封email就等上10秒等Emacs啟動吧?
有一個辦法可以跳過冗長的 Emacs 擴展。只需要把你的 .emacs 里耗時的部分放在一個條件語句里。比如,我就把 desktop 和 session 放在了一個條件語句里啟動。如果知道編輯的文件名叫做 "/tmp/mutt-..." 那我們就知道是 mutt 在調(diào)用 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 ‘a(chǎn)fter-init-hook ‘session-initialize) (setq desktop-globals-to-save ‘(desktop-missing-file-warning)) ;; start server (server-start) )
這種方式可以使用一個已經(jīng)啟動的 Emacs,啟動非??焖佟5俏也皇呛芟矚g這種方式,因為我不想離開 Mutt 的終端到 Emacs 的窗口,編輯完了還要切換窗口???a target="_blank" >這幅圖。
先來看看 Emacs 的設(shè)置,啟動 Emacs 后,你可以使用 server-start 啟動 Emacs 服務(wù)器。你也可以把
(server-start)加入到你的 .emacs 文件,這樣 Emacs 啟動時自動就啟動了服務(wù)器。
在 .muttrc 里加入
set editor=emacsclient這樣 Mutt 在要發(fā)送郵件時,就把需要編輯的東西送到已經(jīng)啟動的 Emacs 里。編輯完了之后你按 C-x #,控制會轉(zhuǎn)回到 Mutt.
由于清華大學(xué)網(wǎng)絡(luò)中心的限制,一般同學(xué)不能直接連接國外的服務(wù)器。這樣 sendmail 就不能直接將郵件發(fā)送到目的地。我們需要依賴國內(nèi)的 郵件服務(wù)器來轉(zhuǎn)發(fā)到目的地。但是現(xiàn)在國內(nèi)的smtp郵件服務(wù)器通常需要 SMTP 驗證才能幫你轉(zhuǎn)發(fā)郵件。比如 mails.tsinghua.edu.cn, 這是一種防止別人利用自己主機發(fā)送垃圾郵件的辦法。
sendmail 怎樣才能通過 SMTP 身份驗證呢?sendmail 的網(wǎng)頁上說有辦法。可是我搞了一天還是沒有搞定。而且 sendmail 是以安全漏洞著稱的。所以我決定換用 Postfix。qmail 也很好,但是我不知道怎么讓 qmail 通過 AUTH SMTP 轉(zhuǎn)發(fā), 如果有人知道請告訴我。
postfix 是一個可以取代 sendmail 的郵件服務(wù)器。它在普通機器上可以達到 sendmail 3 倍的吞吐率。而且相當安全。它可以在 www.postfix.org 下載安裝過程如下:
% make makefiles CCARGS="-DUSE_SASL_AUTH -I/usr/local/include" AUXLIBS="-L/usr/local/lib -lsasl"然后安裝
% make; make install
myhostname = tu140066.tsinghua.edu.cn mydestination = wangyin.com, $myhostname, localhost.$mydomain
$myhostname 指明了你的主機域名,清華大學(xué)的網(wǎng)絡(luò)給了每個人一個域名,其實就是 tuxxxxxx.tsinghua.edu.cn, xxxxxx 就是你的 IP 后面的數(shù)字,比如我的IP是166.111.140.66, 所以我的域名是 tu140066.tsinghua.edu.cn.
$mydestination 指出哪些地址是認為是你自己的地址。你應(yīng)該把你的機器名(我的是 wangyin.com),$myhostname, $localhost.$mydomain 加進去。
smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_security_options = relayhost = mails.tsinghua.edu.cn
Your.Relay.Server your_auth_login_name:Your_PassWord
比如我的口令文件是這樣的:
mails.tsinghua.edu.cn wang-y01:aDF2m@3d$q=+
當然密碼不是那個 :P
#postmap hash:sasl_passwd
postfix start