使用 NeoMutt 在 macOS 终端中管理邮件
本指南将引导你完成在 macOS 上配置邮件环境的整个过程,最终实现完全在终端中接收、阅读和发送邮件。
配置环境如下:
- 操作系统:macOS Sequoia Version 15.6.1
- 终端命令行:iTerm2
- 文本编辑器:Neovim
- 邮件客户端:NeoMutt
- 管理联系人:khard
- 查看其他文件格式的小工具:w3m/zathura/imgcat
整个配置基于即时登录远程邮件服务器。当服务器邮件数量较多时,每次登录刷新邮件列表需要耗费一点时间,1000 封邮件大约是几秒或十几秒的样子。
目录结构
为提高全套配置文件的可移植性,尽量把全部的配置文件放置在同一个目录下,主要的功能也采用模块化的配置文件。
~/.config/neomutt/
├── neomuttrc # Main config, sources everything else
├── settings # General settings (editor, options, etc.)
├── mappings # Keybindings and macros
├── mailcap # External program handlers (use env vars)
├── accounts/ # Account configs and signatures
└── themes/ # Theme configs
其中,neomuttrc
是配置主要入口,文件内部引用另外的四个独立的配置文件:
settings
mappings
themes/dracula.muttrc
accounts/twine
配置了这四个文件之后,就可以在终端里顺畅地使用 NeoMutt 接收、查看、编辑、回复、转发邮件,邮件客户端的基本功能已经具备。
最后的一个配置文件 mailcap
是在实现了最初的文本邮件的基本功能之后,再增加几个额外的功能,例如,在 NeoMutt 中查看 HMTL 格式的邮件,查看 PDF 格式的附件,查看图片格式的附件,等等。这个配置文件是在 settings
内部被引用。
安装工具
在 macOS 系统上,我们使用 Homebrew 来安装所有必要的软件。打开你的终端,比如我使用的是 iTerm2,运行以下命令:
brew install neomutt
配置文件
按照建议的目录结构创建相应的目录和文件。
neomuttrc
配置文件 neomuttrc 是主要入口:
# vim: filetype=muttrc
# Source general settings, mappings, and theme
source ~/.config/neomutt/settings
source ~/.config/neomutt/mappings
source ~/.config/neomutt/themes/dracula.muttrc
# Accounts
source ~/.config/neomutt/accounts/twine
folder-hook $folder source ~/.config/neomutt/accounts/twine
主文件依次分别引入基本配置、快捷键、主题颜色、默认邮箱帐户。子目录 themes
下有多个主题可选,这里设置使用了 dracula
主题;子目录 accounts
下有包含默认帐户 twine
在内的其他多个邮箱帐户,切换各个帐户的快捷键 F2
、F3
、F4
则定义在 mappings
里面。
settings
# vim: filetype=muttrc
# set editor to neovim
set editor = "nvim"
set my_name = "Alowree Xu"
set imap_check_subscribed
# Set preffered view modes
auto_view text/html text/calendar application/ics # view html automatically
# alternative_order text/html text/plain text/enriched text/*
# Main options
set envelope_from
set edit_headers
set fast_reply
set askcc
set fcc_attach
set forward_format = "Fwd: %s"
set forward_decode
set attribution = "On %d, %n wrote:"
set reply_to
set reverse_name
set include
set forward_quote
set text_flowed
set sig_dashes = no
set sig_on_top = yes
unset mime_forward
set tmpdir = "/tmp/$USER/neomutt"
unset confirmappend
set quit
unset mark_old
set beep_new
set pipe_decode
set thorough_search
set timeout = 0
# Status bar, date format, finding stuff etc.
set status_chars = " *%A"
set status_format = "[ Folder: %f ] [%r%m messages%?n? (%n new)?%?d? (%d to delete)?%?t? (%t tagged)? ]%>─%?p?( %p postponed )?"
set date_format = "%d.%m.%Y %H:%M"
set sort = reverse-date
set uncollapse_jump
set sort_re
set reply_regexp = "^(([Rr][Ee]?(\[[0-9]+\])?: *)?(\[[^]]+\] *)?)*"
set quote_regexp = "^( {0,4}[>|:#%]| {0,4}[a-z0-9]+[>|]+)+"
set send_charset = "utf-8:iso-8859-1:us-ascii"
set charset = "utf-8"
set arrow_cursor = "no"
# Pager View Options
set pager_index_lines = 10
set pager_context = 3
set pager_stop
set menu_scroll
set tilde
unset markers
set mailcap_path = ~/.config/neomutt/mailcap
set header_cache = ~/.cache/mutt
set message_cachedir = ~/.cache/mutt
set query_command = "khard email --parsable --search-in-source-files '%s'"
set sidebar_format = "%B %<N?(%N)>%* %S"
注意要点如下:
editor
设置为调用 Neovim 用以编辑邮件头部和主体内容query_command
设置使用Tab
键搜索和补全联系人的电邮地址:主要使用在当编辑邮件头部的表单区域,例如To:
/Cc:
/Bcc:
等位置,需要添加电邮地址的时候,随便打几个你依稀记得的收件人姓名或者电邮地址的若干字母,然后按Tab
键就可一键补全,非常快捷实用
mappings
# vim: filetype=muttrc
# General rebindings
bind attach <return> view-mailcap
bind attach l view-mailcap
bind editor <space> noop
bind pager c imap-fetch-mail
bind index G last-entry
bind index g noop
bind index gg first-entry
bind pager,attach h exit
bind pager j next-line
bind pager k previous-line
bind pager l view-attachments
bind index D delete-message
bind index U undelete-message
bind index L limit
bind index h noop
bind index l display-message
bind browser h goto-parent
bind browser l select-entry
bind pager,browser gg top-page
bind pager,browser G bottom-page
bind index,pager,browser d half-down
bind index,pager,browser u half-up
bind index,pager R group-reply
bind index \031 previous-undeleted # Mouse wheel
bind index \005 next-undeleted # Mouse wheel
bind pager \031 previous-line # Mouse wheel
bind pager \005 next-line # Mouse wheel
bind editor <Tab> complete-query
# sidebar mappings
bind index,pager \Ck sidebar-prev
bind index,pager \Cj sidebar-next
bind index,pager \Cl sidebar-open
bind index,pager \Cp sidebar-prev-new
bind index,pager \Cn sidebar-next-new
bind index,pager B sidebar-toggle-visible
# global index and pager shortcuts
bind index,pager @ compose-to-sender
bind index,pager D purge-message
bind index <tab> sync-mailbox
bind index <space> collapse-thread
# Email completion bindings
bind editor <Tab> complete-query
bind editor ^T complete
# Press A to add contact to Khard address book
macro index,pager A \
"<pipe-message>khard add-email<return>" \
"add the sender email address to khard"
# Shortcuts to switch email account
macro index,pager <f2> '<sync-mailbox><enter-command>source ~/.config/neomutt/accounts/twine<enter><change-folder>!<enter>'
macro index,pager <f3> '<sync-mailbox><enter-command>source ~/.config/neomutt/accounts/soundfreaq<enter><change-folder>!<enter>'
macro index,pager <f4> '<sync-mailbox><enter-command>source ~/.config/neomutt/accounts/biaget<enter><change-folder>!<enter>'
注意要点如下:
Ctrl + o
在 macOS 下已另作他用,无法设定给sidebar-open
使用,故更换为Ctrl + l
配置签名
创建
~/.config/neomutt/signature
,并在文件内添加签名内容。在 NeoMutt 配置文件内添加签名的引用位置:
# .config/neomutt/neomuttrc set signature = "./sigature
这样,每次撰写新邮件时,NeoMutt 会自动地在邮件正文和签名之间插入一个 Unix 风格的邮件签名分隔符 --
。暂时还没有良好的解决方案将 --
去除。
配置联系人
安装 khard
bashbrew install khard
在 NeoMutt 配置文件内添加关于 khard 的配置:
# ============================================================================= # 通讯录 (Address Book) # ============================================================================= # 设置 khard 为地址查询命令 set query_command = "khard email --parsable --search-in-source-files '%s'" bind editor <Tab> complete-query # 在邮件列表或邮件内容界面按 "A" 键,将发件人添加到 khard macro index,pager A "<pipe-message>khard add-email<enter>" "Add sender to khard"
这个配置成功之后,在撰写邮件、添加收件人时,只需先简单敲入几个字符,例如
mich
,然后使用Tab
可以自动补全收件人Michael
的电邮地址mchui@example.com
(当仅有一个搜索匹配时),或弹出下拉列表供选择多个待选电邮(当存在多个搜索匹配时)。