使用 NeoMutt, isync 和 msmtp 在 macOS 终端中管理邮件
本指南将引导你完成在 macOS 上配置邮件环境的整个过程,最终实现完全在终端中接收、阅读和发送邮件。
我们将使用以下三个核心工具:
- NeoMutt: 邮件用户代理 (MUA),我们用它来阅读、编写和管理邮件。
- isync (mbsync): 一个 IMAP 和 MailDir 同步工具,负责将远程邮件服务器上的邮件下拉并同步到本地计算机。
- msmtp: 一个 SMTP 客户端,负责将我们在本地编写的邮件发送出去。
这个组合的优势在于:
- 速度快:所有邮件都在本地,索引和搜索速度极快。
- 安全:密码可以安全地存储在 macOS 的钥匙串中,而不是明文保存在配置文件里。
- 可定制性强:NeoMutt 和相关工具链的每一个环节都可以高度定制。
- 开放标准:使用 Maildir 格式存储邮件,不被任何单一供应商锁定。
第一步:安装工具
我们使用 Homebrew 来安装所有必要的软件。打开你的终端,运行以下命令:
brew install neomutt isync msmtp
第二步:创建目录结构
我们需要为邮件和配置文件创建一些目录。
创建邮件存储目录: 我们将在
~/.mail
目录下为每个邮箱账户创建一个独立的文件夹。这种结构清晰且易于管理。bash# 将 your-email@example.com 替换为你的真实邮箱地址 mkdir -p ~/.mail/your-email@example.com
创建 msmtp 配置目录:
bashmkdir -p ~/.config/msmtp
创建 neomutt 配置目录:
bashmkdir -p ~/.config/neomutt
第三步:生成并存储应用专用密码 (App Password)
这是一个至关重要的安全步骤! 为了安全,不要在配置文件中使用你的主登录密码。几乎所有的主流邮件服务商(Gmail, Outlook, iCloud, 163等)都支持生成“应用专用密码”。
- 登录你的邮件提供商的网页版。
- 进入账户安全设置。
- 找到“应用专用密码”(App Passwords / App-Specific Passwords)选项并生成一个新的密码。给它起个名字,比如 "NeoMutt"。
- 复制这个生成的密码,我们马上会用到它。
现在,我们将这个专用密码安全地存储在 macOS 的钥匙串 (Keychain) 中。
# 将 your-email@example.com 替换为你的邮箱
# 将 YOUR_APP_PASSWORD 替换为你刚刚生成的应用专用密码
security add-generic-password -a 'your-email@example.com' -s 'mail_password' -w 'YOUR_APP_PASSWORD'
这样做之后,我们的配置文件将通过命令从钥匙串中读取密码,而不是明文存储。
第四步:配置 isync (mbsync) - 同步邮件
isync
的配置文件是 ~/.mbsyncrc
。创建这个文件并填入以下内容。请务必将所有占位符(例如 your-email@example.com
, imap.example.com
)替换为你的实际信息。
文件: ~/.mbsyncrc
(更新版语法)
# IMAP 账户配置
IMAPAccount my-account
Host imap.example.com
User your-email@example.com
# 使用命令从 macOS 钥匙串中获取密码
PassCmd "security find-generic-password -a 'your-email@example.com' -s 'mail_password' -w"
TLSType IMAPS
AuthMechs LOGIN
# 远程邮件服务器存储配置
IMAPStore my-account-remote
Account my-account
# 本地邮件存储配置
MaildirStore my-account-local
# 邮件将存储在这个路径下
Path ~/.mail/your-email@example.com/
# 收件箱路径
Inbox ~/.mail/your-email@example.com/Inbox
# 设置为 yes 会让 mbsync 自动处理目录分隔符的转换
Subfolders Verbatim
# 同步通道配置
Channel my-account-inbox
Far :my-account-remote:
Near :my-account-local:
# 同步所有文件夹
Patterns *
# 自动创建本地文件夹
Create Near
# 立即从本地删除已在服务器上删除的邮件
Expunge Near
# 同步
Sync Pull
第五步:配置 msmtp - 发送邮件
msmtp
的配置文件是 ~/.config/msmtp/config
。创建这个文件并填入以下内容。
文件: ~/.config/msmtp/config
# 默认账户
defaults
auth on
tls on
tls_starttls off
tls_trust_file /etc/ssl/cert.pem
logfile ~/.config/msmtp/msmtp.log
# 你的邮箱账户配置
account my-account
host smtp.example.com
port 465
from your-email@example.com
user your-email@example.com
# 同样,从钥匙串中获取密码
passwordeval "security find-generic-password -a 'your-email@example.com' -s 'mail_password' -w"
# 设置 my-account 为默认发送账户
account default : my-account
重要:设置文件权限 为了保护你的配置,设置正确的权限,确保只有你自己可以读写这个文件。
chmod 600 ~/.config/msmtp/config
第六步:配置 NeoMutt - 邮件客户端
现在我们来配置主角 NeoMutt。它的配置文件是 ~/.config/neomutt/neomuttrc
。
文件: ~/.config/neomutt/neomuttrc
# =============================================================================
# 账户信息 (Account Info)
# =============================================================================
set realname = "你的名字"
set from = "your-email@example.com"
# =============================================================================
# 文件夹路径 (Folder Paths)
# =============================================================================
# 设置 Maildir 的根目录
set folder = "~/.mail/your-email@example.com"
# 定义标准文件夹
# mbsync 会自动创建这些文件夹,这里我们告诉 neomutt 它们的位置
set spoolfile = "+Inbox" # 收件箱
set record = "+Sent" # 已发送
set postponed = "+Drafts" # 草稿箱
# =============================================================================
# 发送邮件 (Sending Mail)
# =============================================================================
# 将发送邮件的任务交给 msmtp
set sendmail = "msmtp -a my-account"
# =============================================================================
# 编辑器 (Editor)
# =============================================================================
# 设置你喜欢的终端编辑器,例如 vim, neovim, emacs, nano
set editor = "nvim"
# =============================================================================
# 界面和体验优化 (UI & UX)
# =============================================================================
set sort = threads # 按线索排序
set sort_aux = reverse-date # 辅助排序为倒序日期
set pager_index_lines = 10 # 在邮件阅读界面显示10行索引
set arrow_cursor # 在当前行前显示箭头 ">"
set sidebar_visible = yes # 显示侧边栏
set sidebar_width = 20 # 侧边栏宽度
# =============================================================================
# 宏和快捷键 (Macros & Bindings)
# =============================================================================
# 按 F5 键来调用 mbsync 同步邮件
macro index,pager <F5> "<shell-escape>mbsync -a my-account<enter>" "Sync Mailbox"
第七步:首次同步和启动
一切准备就绪!
首次同步邮件: 打开终端,运行
mbsync
。-a
参数表示同步所有配置的通道。bashmbsync -a
根据你的邮箱大小,第一次同步可能会花费一些时间。耐心等待它完成。
启动 NeoMutt: 同步完成后,直接在终端输入
neomutt
启动程序。bashneomutt
你现在应该能看到你的收件箱了!
附录:常见邮件服务商配置
以下是一些常见邮件服务商的 IMAP 和 SMTP 服务器信息。请在配置 ~/.mbsyncrc
和 ~/.config/msmtp/config
时使用。
服务商 | IMAP 主机 (Host ) | SMTP 主机 (host ) |
---|---|---|
Gmail | imap.gmail.com | smtp.gmail.com |
Outlook | outlook.office365.com | smtp.office365.com |
iCloud | imap.mail.me.com | smtp.mail.me.com |
163 (网易) | imap.163.com | smtp.163.com |
钥匙串(Keychain)问题排查
如果你在运行 mbsync -a
时遇到 The specified item could not be found in the keychain
的错误,请按照以下步骤操作:
直接测试密码获取: 在终端里直接运行
PassCmd
中的命令,看看能否成功取回密码。记得替换成你的邮箱。bashsecurity find-generic-password -a 'your-email@example.com' -s 'mail_password' -w
- 如果这个命令成功返回了你的应用专用密码,那么问题可能出在
mbsync
的配置上。请仔细检查~/.mbsyncrc
文件中的PassCmd
行是否有拼写错误。 - 如果这个命令失败并提示
The specified item could not be found in the keychain
,说明当初存储密码时可能有误。请继续下一步。
- 如果这个命令成功返回了你的应用专用密码,那么问题可能出在
删除并重新添加密码: 我们先删除可能存在的错误条目,然后重新添加一次。
bash# 删除旧的(可能会提示找不到,没关系) security delete-generic-password -a 'your-email@example.com' -s 'mail_password' # 重新添加,这一次请格外小心,确保 -a 和 -s 的值完全正确 # 将 YOUR_APP_PASSWORD 替换为你的应用专用密码 security add-generic-password -a 'your-email@example.com' -s 'mail_password' -w 'YOUR_APP_PASSWORD'
再次测试: 重新添加后,再次运行第一步的
find-generic-password
命令。如果现在可以成功返回密码,那么再次运行mbsync -a
应该就能正常工作了。
关键在于,add-generic-password
命令中的 -a '...'
和 -s '...'
的内容,必须和 ~/.mbsyncrc
以及 ~/.config/msmtp/config
文件中 find-generic-password
命令里的 -a '...'
和 -s '...'
完全一致。
基本使用
j
/k
或上下方向键
:在邮件列表中移动。Enter
: 阅读邮件。q
: 退出当前视图或程序。m
: 写新邮件。r
: 回复邮件。c
: 切换文件夹 (按Tab
可以看到所有文件夹)。$
:保存更改(例如,删除邮件后需要保存)。<F5>
: (根据我们的配置) 手动触发邮件同步。
恭喜!你已经成功在 macOS 终端上搭建了一套强大、高效的邮件管理系统。
配置签名
创建
~/.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
(当仅有一个搜索匹配时),或弹出下拉列表供选择多个待选电邮(当存在多个搜索匹配时)。