在 Linux 命令行中收發 Gmail 郵件
我喜歡在 Linux 終端上讀寫電子郵件的便捷,因此我是 Mutt 這個輕量簡潔的電子郵件客戶端的忠實用戶。對於電子郵件服務來說,不同的系統配置和網路接入並不會造成什麼影響。這個客戶端通常隱藏在我 Linux 終端的 某個標籤頁或者某個終端復用器的面板 上,需要用的時候隨時可以調出來,不需要使用的時候放到後台,就不需要在桌面上一直放置一個電子郵件客戶端的應用程序。
當今我們大多數人使用的都是託管電子郵件賬號,在這種使用場景中並不會與電子郵件協議發生過多的直接交互。而 Mutt(以及更早的 ELM)是在更簡單的時代創建的,那時候檢查郵件只是對 uucp
的調用,以及對 /var/mail
的讀取。當然 Mutt 也很與時俱進,隨著各種流行的協議(如 POP、IMAP、LDAP)出現,它都實現了良好的支持。因此,即使我們使用的是 Gmail 這種郵件服務,也可以與 Mutt 無縫銜接。
如今在大多數情況下,用戶都不會擁有自己的電子郵件伺服器,大部分用戶都會選擇 Gmail,因此下文會以 Mutt + Gmail 為例作介紹。如果你比較注重電子郵件隱私,不妨考慮 ProtonMail 或者 Tutanota,它們都提供完全加密的電子郵件服務。其中 Tutanota 包含很多 開源組件,而 ProtonMail 則為付費用戶提供 IMAP 橋接,簡化了在非瀏覽器環境下的郵件訪問。不過,很多公司、學校和組織都沒有自己的電子郵件服務,而是使用 Gmail 提供的郵件服務,這樣一來,大部分用戶都會有一個 Gmail 郵箱。
當然,如果你自己就 擁有電子郵件伺服器,那麼使用 Mutt 就更簡單了。下面我們開始介紹。
安裝 Mutt
在 Linux 系統上,一般可以直接從發行版提供的軟體庫中安裝 Mutt,另外需要在家目錄中創建一個 .mutt
目錄以存放配置文件:
$ sudo dnf install mutt
$ mkdir ~/.mutt
在 MacOS 上,可以通過 MacPorts 或者 Homebrew 安裝;在 Windows 上則可以使用 Chocolatey 安裝。
Mutt 是一個 郵件用戶代理 (MUA),因此它的作用是讀取、編寫以及向外部郵件池發送郵件。向郵件伺服器實際傳輸郵件是其它應用或郵件服務的工作,儘管它們可以和 Mutt 進行協作,讓我們看起來是 Mutt 完成了所有功能,但實際上並非如此。在弄懂了兩者之間的區別之後,我們會對 Mutt 的配置更加清楚。
這也是為什麼除了 Mutt 之外,我們還需要視乎進行通信的服務種類選擇一些輔助應用程序。在本文中我使用的是 IMAP 服務,這可以讓我本地的電子郵件副本與電子郵件服務提供商的遠程郵件副本保持同步。如果你選擇 POP 服務,配置的難度就更下一個台階了,也無需依賴其它外部工具。我們需要 OfflineIMAP 這個 Python 應用程序來實現 IMAP 的集成,這個應用程序可以在 它的 GitHub 存儲庫 獲取。
OfflineIMAP 目前仍然在從 Python 2 移植到 Python 3,目前需要手動安裝,但以後你也可以通過 python3 -m pip
命令進行安裝。
OfflineIMAP 依賴於 imaplib2
庫,這個庫也在努力開發當中,所以我更喜歡手動安裝。同樣地,也是通過 Git 將代碼庫克隆到本地,進入目錄後使用 pip
安裝。
首先安裝 rfc6555
依賴:
$ python3 -m pip install --user rfc6555
然後從源碼安裝 imaplib2
:
$ git clone git@github.com:jazzband/imaplib2.git
$ pushd imaplib2.git
$ python3 -m pip install --upgrade --user .
$ popd
最後從源碼安裝 OfflineIMAP:
$ git clone git@github.com:OfflineIMAP/offlineimap3.git
$ pushd offlineimap3.git
$ python3 -m pip install --upgrade --user .
$ popd
如果你使用的是 Windows 上的 Cygwin,那麼你還需要安裝 Portlocker。
配置 OfflineIMAP
OfflineIMAP 默認使用 ~/.offlineimaprc
這個配置文件,在它的代碼庫中會有一個名為 offlineimap.conf
的配置模板,可以直接將其移動到家目錄下:
$ mv offlineimap3.git/offlineimap.conf ~/.offlineimaprc`
你可以使用任何文本編輯器打開瀏覽這個配置文件,它的注釋很完善,便於了解各個可用的配置項。
以下是我的 .offlineimaprc
配置文件,為了清晰起見,我把其中的注釋去掉了。對於你來說其中有些配置項的值可能會略有不同,但或許會為你的配置帶來一些啟發:
[general]
ui = ttyui
accounts = %your-gmail-username%
pythonfile = ~/.mutt/password_prompt.py
fsync = False
[Account %your-gmail-username%]
localrepository = %your-gmail-username%-Local
remoterepository = %your-gmail-username%-Remote
status_backend = sqlite
postsynchook = notmuch new
[Repository %your-gmail-username%-Local]
type = Maildir
localfolders = ~/.mail/%your-gmail-username%-gmail.com
nametrans = lambda folder: {'drafts': '[Gmail]/Drafts',
'sent': '[Gmail]/Sent Mail',
'flagged': '[Gmail]/Starred',
'trash': '[Gmail]/Trash',
'archive': '[Gmail]/All Mail',
}.get(folder, folder)
[Repository %your-gmail-username%-Remote]
maxconnections = 1
type = Gmail
remoteuser = %your-gmail-username%@gmail.com
remotepasseval = '%your-gmail-API-password%'
## remotepasseval = get_api_pass()
sslcacertfile = /etc/ssl/certs/ca-bundle.crt
realdelete = no
nametrans = lambda folder: {'[Gmail]/Drafts': 'drafts',
'[Gmail]/Sent Mail': 'sent',
'[Gmail]/Starred': 'flagged',
'[Gmail]/Trash': 'trash',
'[Gmail]/All Mail': 'archive',
}.get(folder, folder)
folderfilter = lambda folder: folder not in ['[Gmail]/Trash',
'[Gmail]/Important',
'[Gmail]/Spam',
]
配置文件里有兩個可以替換的值,分別是 %your-gmail-username%
和 %your-gmail-API-password%
。其中第一個值需要替換為 Gmail 用戶名,也就是郵件地址中 @gmail.com
左邊的部分。而第二個值則需要通過雙因素身份驗證(2FA)後從 Google 獲取(即使你在查收郵件時不需要使用 2FA)。
為 Gmail 設置雙因素身份驗證(2FA)
Google 希望用戶通過 Gmail 網站收發電子郵件,因此當你在 Gmail 網站以外操作電子郵件時,實際上是被 Google 作為「開發者」看待(儘管你沒有進行任何開發工作)。也就是說,Google 會認為你正在創建一個應用程序。要獲得開發者層面的應用程序密碼,就必須設置雙因素身份驗證。完成了這個過程以後,就可以獲得一個應用程序密碼,Mutt 可以通過這個密碼在瀏覽器以外的環境登錄到你的電子郵箱中。
為了安全起見,你還可以在 Google 的 賬號安全 頁面中添加一個用於找回的電子郵件地址。
在賬號安全頁面中,點擊「 兩步驗證 」開始設置 2FA,設置過程中需要用到一部手機。
激活 2FA 之後,賬號安全頁面中會出現「 應用程序密碼 」選項,點擊就可以為 Mutt 創建一個新的應用程序密碼。在 Google 生成密碼之後,將其替換 .offlineimaprc
配置文件中的 %your-gmail-API-password%
值。
直接將應用程序密碼記錄在 .offlineimaprc
文件中,這種以純文本形式存儲的做法有一定的風險。長期以來我都是這樣做的,而且感覺良好,因為我的家目錄是加密的。但出於安全考慮,我現在已經改為使用 GnuPG 加密應用程序密碼,這部分內容不在本文的討論範圍,關於如何設置 GPG 密碼集成,可以參考我的 另一篇文章。
在 Gmail 啟用 IMAP
在你永遠告別 Gmail 網頁界面之前,還有最後一件事:你必須啟用 Gmail 賬戶的 IMAP 訪問。
在 Gmail 網站頁面中,點擊右上角的「cog」圖標,選擇「 查看所有設置 」。在 Gmail 設置頁面中,點擊「POP/IMAP」標籤頁,並選中「 啟用 IMAP 」,然後保存設置。
現在就可以在瀏覽器以外訪問你的 Gmail 電子郵件了。
配置 Mutt
Mutt 的配置過程相對簡單。和 .bashrc、.zshrc、.emacs
這些配置文件一樣,網路上有很多優秀的 .muttrc 配置文件可供參照。我自己的 .muttrc
配置文件則借鑒了 Kyle Rankin、Paul Frields 等人的配置項和想法。下面列出我的配置文件的一些要點:
set ssl_starttls=yes
set ssl_force_tls=yes
set from='tux@example.com'
set realname='Tux Example'
set folder = imaps://imap.gmail.com/
set spoolfile = imaps://imap.gmail.com/INBOX
set postponed="imaps://imap.gmail.com/[Gmail]/Drafts"
set smtp_url="smtp://smtp.gmail.com:25"
set move = no
set imap_keepalive = 900
set record="imaps://imap.gmail.com/[Gmail]/Sent Mail"
# Paths
set folder = ~/.mail
set alias_file = ~/.mutt/alias
set header_cache = "~/.mutt/cache/headers"
set message_cachedir = "~/.mutt/cache/bodies"
set certificate_file = ~/.mutt/certificates
set mailcap_path = ~/.mutt/mailcap
set tmpdir = ~/.mutt/temp
set signature = ~/.mutt/sig
set sig_on_top = yes
# Basic Options
set wait_key = no
set mbox_type = Maildir
unset move # gmail does that
# Sidebar Patch
set sidebar_visible = yes
set sidebar_width = 16
color sidebar_new color221 color233
## Account Settings
# Default inbox
set spoolfile = "+example.com/INBOX"
# Mailboxes to show in the sidebar.
mailboxes +INBOX
+sent
+drafts
# Other special folder
set postponed = "+example.com/drafts"
# navigation
macro index gi "<change-folder>=example.com/INBOX<enter>" "Go to inbox"
macro index gt "<change-folder>=example.com/sent" "View sent"
整個配置文件基本是開箱即用的,只需要將其中的 Tux Example
和 example.com
替換為你的實際值,並將其保存為 ~/.mutt/muttrc
就可以使用了。
啟動 Mutt
在啟動 Mutt 之前,需要先啟動 offlineimap
將遠程郵件伺服器上的郵件同步到本地。在首次啟動的時候耗時可能會比較長,只需要讓它整晚運行直到同步完成就可以了。
在同步完成後,啟動 Mutt:
$ mutt
Mutt 會提示你打開用於管理電子郵件的目錄許可權,並展示收件箱的視圖。
![Mutt email client](/data/attachment/album/202107/12/105003nysa3xy9wzl194n0.png "Mutt email client")
學習使用 Mutt
在學習使用 Mutt 的過程中,你可以找到最符合你使用習慣的 .muttrc
配置。例如我的 .muttrc
配置文件集成了使用 Emacs 編寫郵件、使用 LDAP 搜索聯繫人、使用 GnuPG 對郵件進行加解密、鏈接獲取、HTML 視圖等等一系列功能。你可以讓 Mutt 做到任何你想讓它做到的事情,你越探索,就能發現越多。
via: https://opensource.com/article/21/7/gmail-linux-terminal
作者:Seth Kenlon 選題:lujun9972 譯者:HankChow 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive