Mutt (正體中文)
- Mutt是一個基於文本的郵件用戶端,因其具有強大的特性而聲名赫赫。儘管Mutt已經是一個十多年前的老東西了,但對於相當多的高級用戶來說,仍然是郵件用戶端之必選。不幸的是,Mutt會默認安裝一套複雜的快鍵綁定(keybindings),令人頭痛;說明文檔又長篇大論,足令人心悸。本指南將幫助那些普通用戶來安裝和運行Mutt,並幫助他(她)們按照自己的喜好,對Mutt作出初步的設定。
趕快開始吧
哪些是Mutt不會做的
Mutt是一個用戶級的電郵代理(MUA),這個程式就是被寫出來觀看電郵用的。寫它的是時候,並不是用來收、發和過濾電郵的。它要依賴外部程式來做這些事。在此Wiki中,我們將在POP3/IMAP協議下,使用 offlineimap 或者 getmail 來收郵件,用 procmail 來過濾郵件,並用 msmtp 來發送郵件。
安裝Mutt
通過一個簡單的命令 pacman -S mutt
就能安裝 Mutt了。
設置 IMAP 方式接收電郵
Mutt 已經內建支援 IMAP 方式,卻不會自己下載電郵來離線使用(除非設置好它)。本小節講述了如何用OfflineIMAP 來將電郵下載到本地文件夾中,然後用Mutt來處理這些郵件。
設置OfflineIMAP
首先要啟用Community程式庫,並通過一個簡單的命令 pacman -S offlineimap
來安裝 OfflineIMAP。
現在你要按自己的需要來設置好它。創建一個文件~/.offlineimaprc
並用你中意的編輯器來編輯它。下面是一個配置文件的例示。可按自己的需要來編輯它。
[general] accounts = myaccount # 郵件帳戶在本地電腦上的稱謂名,將它改為你任何你想要的名字 ui = Curses.Blinkenlights # Blinky樣式的控制臺輸出,讓你知道發生了什么。 # ui = Noninteractive.Quiet # 如果啟用此行,則不會輸出任何東西。最適宜cronjobs 在幕後運行了。 [Account myaccount] # 這裡的“myaccount”就是你在剛剛在上面改過的稱謂名了。 localrepository = mylocal # 這裡是特定的稱謂名“myaccount”之下的本地郵件暫存處的名字,起個自己喜歡的名字。 remoterepository = myremote # 這裡是特定的稱謂名“myaccount”之下的遠程郵件暫存處的名字,起個自己喜歡的名字,比如:Gmail。 # autorefresh = 5 # 如果啟用此行,則每隔五分鐘抓取一下電郵 [Repository mylocal] # 這裡的“mylocal”就是你在剛剛在上面改過的本地郵件暫存處的名字。 type = Maildir # 在本地存儲郵件的方式。當然只支持 Maildir 方式。 localfolders = ~/Mail # 指定~/Mail這個文件夾來跟電郵服務器同步電郵。當然必須事先創建好這個文件夾了,不過文件夾的名字可改為你任何你想要的名字。 [Repository myremote] # 這裡的“myremote”就是你在剛剛在上面改過的遠程郵件暫存處的名字。 type = IMAP # 遠程郵箱的類型。當前僅支持 IMAP 類型的郵箱。 remotehost = imap.myhost.com # 連接什么地方的電郵呢?比如Gmail郵箱就是:imap.gmail.com ssl = yes # 啟用安全的 SSL 支持,需事先安裝OpenSSL。 # remoteport = 993 # 如果郵箱能支持的話,就一定要啟用,這將指定一個特定的加密通訊埠:993。否則將使用缺省的普通通訊埠,也起不到加密的作用了。 remoteuser = myremoteusername # 就是你的郵箱登入名啦。 remotepass = myremotepassword # 郵箱的密碼。 -- 當然,像這樣直接列出密碼,是不太安全。所以你要確信該文件只有你才有讀取權限。還有更好的辦法,不過就請自行參看OfflineIMAP的手冊吧。
這是能讓你運行起來的最少設置了。更多高級的特性,請參閱OfflineIMAP的主頁,再返回頭看一看offlineimaprc註解.
現在就快要準備好運行 OfflineIMAP 了。
創建一個已經在 offlineimaprc 中定義好的目錄,就像這樣: mkdir ~/Mail
。然後運行 offlineimap
。你的電郵就會同步到本地電腦上了。如果出了什么錯,就仔細查看一下錯誤消息。通常 OfflineIMAP 提示的錯誤消息有比較詳盡的文字說明。
如果能夠成功運行,那么可以啟用 # ui = Noninteractive.Quiet
這一行,以關閉提示信息。
讓 Mutt 配合 offlineimap 收信
若要配合配合 offlineimap 收信,那么本地存儲郵件的方式,只能是 Maildir 方式。
MailDir 的好處在於其格式的通用性和標準化.幾乎每一個 MUA 都能處理 MailDirs ,而 Mutt 當然也支持得很棒。現在用你的編輯器打開 ~/.muttrc
並將下面這幾行添加進入:
set mbox_type=Maildir #設置郵件存儲方式為:Maildir set folder=~/Mail #設置郵件的存儲目錄為:~/Mail ,這個目錄跟上面 offlineimaprc 中設置的 localfolders 目錄必須是一致的。否則 offlineimap 收到的信,Mutt 是找不到的。 set spoolfile=+/INBOX #將接收/閱讀新郵件的目錄設置為:~/Mail/INBOX 。因為 offlineimap 會默認把新郵件放到 INBOX 這個目錄中。該行也可以這樣寫:set spoolfile = "+INBOX" ,這种寫法跟上面是一樣的含義。 set mbox = "+inbox" #新郵件閱讀後,轉移到 ~/Mail/inbox 這個目錄。 set record = "+sent" #郵件被成功發送後,轉移到 ~/Mail/sent 這個目錄。 set postponed = "+draft" #郵件如果暫時不能發送或要推遲發送,就轉移到 ~/Mail/draft 這個目錄。 set header_cache=~/Mail/.hcache #設置郵件頭的暫存目錄 macro index G "!/usr/bin/offlineimap \n" "Checking mails......" #設置一個快捷鍵:G ,來調用 offlineimap 查閱新電郵
這是一個最精簡的配置文件了,能讓你訪問你的 Maildir,並在收件箱(INBOX)中檢查新電郵。這個配置也對電郵的郵件頭作了暫存,從而加速郵件的列示過程。也許你的安裝包沒有開啟暫存功能,不過Arch 的安裝包一定是開啟了的。注意這項功能真的對 OfflineIMAP 有相當影響。它總是在從郵件服務器同步電郵。 spoolfile
告訴Mutt從本地哪個目錄來得到新電郵。你可能還想添加更多的 Spoolfiles,例如郵件列表(Mailing List)所在的目錄。或者你想添加其它什么東西,但這就超出了這份文檔的范圍了,還請自行參閱手冊 mutt(1) 。
當然,我們也最好事先創建好配置文件中的那些郵件儲存目錄。然後就可以鍵入指令: mutt
來收信和閱讀信件了。
就這樣了。別忘了將每一樣設置都調整到你喜歡的樣子。自己努力解決吧。
設置POP方式接收電郵
配置 GetMail
先安裝getmail。它在[extra]
程式庫中.
pacman -S getmail
現在創建目錄: ~/.getmail/
。用編輯器打開~/.getmail/getmailrc
。
這裡有一個例子 getmailrc
,用的是Gmail帳戶。
[retriever] type = SimplePOP3SSLRetriever server = pop.gmail.com username = username@gmail.com port = 995 password = password [destination] type = Maildir path = ~/mail/
你可以將它調整為你自己的POP3服務配置。
在本指南中,我們將把郵件以 maildir
的格式存放起來。兩個主要的郵箱格式分別是 mbox
和maildir
。其差別主要在於: mbox
是存儲著所有郵件及其郵件頭的一個文件;而 maildir
是一個目錄樹,每個郵件都是一個單獨的文件,這往往能提升運行速度。
maildir
只是一個文件夾,裡面有 cur
, new
和 tmp
這三個文件夾。
mkdir -p ~/mail/{cur,new,tmp}
現在可以運行getmail了。如果它正常工作了,就可以為getmail創建一個計劃任務(cronjob),讓它每過幾分鐘/小時就運行一次。鍵入 crontab -e
命令來編輯cronjobs,輸入以下內容:
*/30 * * * * /usr/bin/getmail
此設置可以每隔三十分鐘,運行一次getmail
。
讓 Mutt 配合 GetMail 收信
配置文件的內容跟上面是大同小異的。也許要單獨指定 spoolfile 的目錄。自己試試吧。
郵件排序
Procmail 是一個極其強大的排序工具。鑒于此篇Wiki的目地,我們將做一些基本排序設置,來拋磚引玉。
先安裝procmail。它在 [extra]
程式庫中。
pacman -S procmail
用哪個工具來接收電郵,就必須對哪個工具的配置文件進行編輯。
遺憾的是,上文中談到的 offlineimap 當前無法配合 procmail 來使用。它只負責從 IMAP 服務器上同步電郵,故需事先在 IMAP 服務器上作好相關的設定(如果電郵服務器支援的話)。
這裡以 getmail 這個工具為例,它必須要配置 getmailrc
,使你收郵件的時候,通過procmail來處理。可添加:
[destination] type = MDA_external path = /usr/bin/procmail
現在用編輯器打開 ~/.procmailrc
。下面將對來自happy-kangaroos 郵件列表,以及來自親朋好友的所有電郵作一個排序,每個人都有各自的Maildir。
#指定郵件目錄 MAILDIR=~/Mail #酌情填寫閱讀新郵件的目錄 DEFAULT=$MAILDIR/INBOX/ #指定處理時的記錄文件 LOGFILE=$MAILDIR/procamil_log #所有發往happy-kangaroos@nicehost.com的電郵,放入 happy-kangaroos 目錄。 :0: * ^To: happy-kangaroos@nicehost.com happy-kangaroos/ #所有來自loveydovey@iheartyou.net的電郵,放入 lovey-dovey 目錄。 :0: * ^From: loveydovey@iheartyou.net lovey-dovey/
保存 .procmailrc
後,運行getmail,看看它是否在適當的目錄中對你的郵件成功排序了。
用 SMTP 協議發送電郵
無論你是用 POP 還是 IMAP 協議來接收電郵,都可能要用到 SMTP 協議來發送郵件。
這裡選擇 msmtp 這個工具來幫助我們發送郵件。
配置 msmtp
Msmtp是一個很簡單易用的SMTP用戶端,安全性也不錯。它在[extra]
程式庫中。
pacman -S msmtp
用編輯器打開 ~/.msmtprc
。下面以 Gmail 帳戶為例來配置 .msmtprc
:
account default # 我們可能會有不少電郵帳戶,也許每個帳戶都使用不同的方式來發送電郵,default 表示這是當前用戶的缺省郵件帳戶發送方式。 host smtp.gmail.com port 587 # 這是 Gmail 的 TLS 通訊埠 # port 465 # 這是 Gmail 的 SSL 通訊埠 protocol smtp auth on # 允許 SMTP 驗證,on參數msmtp會爲你選擇一個最佳方案 tls on # 允許 TLS/SSL 加密連接,以保證電郵安全。如果指定了 Gmail 的 TLS 通訊埠, #那么它必須:要麼使用 tls_trust_file 指定一個信任的服務器證書, 要麼就關閉 #tls_certcheck (易受到中間人攻擊)。不是每一台電郵服務器都支持 TLS 隧道加密方式 。 #有個別的服務器只能實現 SSL 加密,它會要求 tls on 的同時,關閉掉 tls_starttls 。 tls_trust_file ~/TRUST_CERT_FILE.crt # ca-certificates.crt 就是個可信任證書,對 Gmail 而言。 #tls_certcheck off #如果沒有可信任的服務器證書,就只好啟用上面這行了。 # tls_starttls off # 啟用 TLS 保護下的 SMTP 隧道。缺省情況下就是打開的。需要指定 Gmail 的 TLS 通訊埠。 from username@gmail.com user username@gmail.com password mypassword
編輯好配置文件後,還需要設定它的權限為:僅用戶本人才能有此文件的讀寫權限:
chmod 600 ~/.msmtprc
用 1.4.11 版的 msmtp 時,必然要涉及到設定 TLS 。 msmtp, 传输层安全 和 msmtp, TLS, and ArchLinux對于如何配置 msmtp 的認証作出了指導。
你可以用--serverinfo --tls --tls-certcheck=off来获取服务器证书和指纹信息。配置示例:tls_trust_file /etc/ssl/certs/ca-certificates.crt 或者 tls_fingerprint 01:23:45:67: … 。对于某些服务器,您可能需要禁用tls_starttls。如果你確實不知道上哪裡去找 ca-certificates.crt 這個 Gmail 信任的根證書,那么就
自己申請一個吧。
讓 Mutt 配合 msmtp 發送電郵
如果是按照上文所述,已經對 ~/.muttrc
作了一些配置,那么還要再添加一些設置,才能在 Mutt 程式中發送電郵:
set realname='YOUR NAME' set sendmail="/usr/bin/msmtp" # 配合 procmail ,分別指定不同來源電郵的接收目錄,也就是 Mutt 讀取電郵的目錄。 mailboxes +INBOX +lovey-dovey +happy-kangaroos
現在,啟動 mutt。你會在 ~/mail/INBOX
看到所有的郵件。按下 m
鍵來撰寫郵件, (它會使用 EDITOR
環境變量中定義好的編輯器。如果這個變量還沒有被設定,那麽可鍵入 export EDITOR=/path/to/yourfavorite/editor
。想要測試一下,可以給自己發一封郵件。
寫好信後,在你的編輯器中保存它。再返回到Mutt中,它會顯示出這封郵件的消息。按 y
來發送它。如果都正常,那麽就恭喜了!你能用Mutt了!不過呢,要實現Mutt真正強大的能力,還要作一些進一步的定制才行啊。
一份關于使用與定制Mutt的指南:
- My first mutt (由Bruno Postle維護)
- The Woodnotes Guide to the Mutt Email Client (由Randall Wood維護)
xterminus 是mutt社區中相當活躍的人。可以從 Code and Configs Page[失效連結 2020-08-04 ⓘ] 找到他的個人配置文件。如果你有什麽特別的問題,請隨意在 the irc channel 上提問。
郵件簽名
在你的家目錄($HOME)中創建一個 .signature
文件。你的簽名會在附在郵件的後面。
用Firefox查看URL鏈接
你可以在$HOME創建一個 ./mutt
目錄,如果沒有的話。 再創建一個名為 macros 的文件。 加入下面的內容:
macro pager \cb <pipe-entry>'urlview'<enter> 'Follow links with urlview'
然後必需要安裝 urlview ,它在 [AUR] 倉庫中,可用
在$HOME創建一個 .urlview 配置文件,并加入下面的內容:
REGEXP (((http|https|ftp|gopher)|mailto)[.:][^ >"\t]*|www\.[-a-z0-9.]+)[^ .,;\t>">\):] COMMAND firefox %s
當用Mutt閱讀郵件時,點擊 ctrl+b ,將會列出郵件中所有的超級鏈接 urls 。用箭頭按鍵上下翻動它們,然後在要訪問的鏈接上點擊 enter 。Firefox 將啟動,并訪問那個站點了。
當然,urlview 配置文件中的“firefox”完全可以用任意網頁網頁瀏覽器來替換,比如:swiftfox, elinks, w3m,等等。
Mutt 和 Vim
要將文本的寬度限制在 72 個字符, 可編輯你的 .vimrc 文件,并加入:
au BufRead /tmp/mutt-* set tw=72
這樣,Vim 只有在你使用 Mutt 的時候,都會有上面的行為了。
要設置另外一個臨時文件目錄,如 ~/.tmp,可在你的 .muttrc 文件中加上一行,如下所示:
set tmpdir="~/.tmp"
要重新格式化一個調整過的文本,可參看 Vim 的幫助文件:
:h 10.7
一點引導
有沒有同時支持 IMAP 和 POP 方式收信的工具呢?
有,那就是 fetchmail. 安裝方法: pacman -S fetchmail
它是一個更加強大的電郵接收工具,見Fetchmail ,它支援包括 POP 和 IMAP 在內的多種協議,也能支援 procmail 。
有沒有同時支持 IMAP 和 POP 方式收信,還能郵件排序的呢?
有,那就是 FDM (Fetch and Deliver Mail) 安裝方法: pacman -S fdm
它是一個輕量級的電郵接收和排序工具,可以替代 fetchmail + procmail. 參見 FDM,還有論壇上的文章:fdm - a new procmail & fetchmail & esmtp
自動生成 mutt 配置文件
mutt 配置文件比較複雜,不過現在有一個工具可幫助生成配置文件,可自行參閱 muttrc builder[失效連結 2021-11-14 ⓘ]