Mutt (正體中文) - ArchWiki

# Mutt (正體中文)

From ArchWiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

  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[dead link 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[dead link 2020-08-04 ⓘ]

Categories:

- 正體中文
- Email clients (正體中文)

Hidden category:

- Pages with dead links