arch linux上的邮箱管理客户端

arch linux上的邮箱管理客户端

在我的arch linux上一直没有使用一个邮箱app来统一管理我的邮箱,每次在这个设备接收发送邮件都需要打开浏览器的web端,步骤太繁琐了,所以趁着现在闲着来研究一下

最开始我选择的是aerc,他极致轻量直接发送tcp连接,终端直接运行,且高度自定义

image-20261006133654393

aerc的安装与配置

在arch上可以通过pacman来安装

1
sudo pacman -S aerc w3m pass

其中w3m用于简单的html渲染,有些邮件发送格式为html,通过这个工具不需要之后每次都专门用浏览器来读取这类邮件;

pass为一个简单的本地加密工具极其轻量,用于防止在配置文件中密码明文暴露

初始化本地的gpg密钥

1
gpg --generate-key

初始话pass仓库

查找gpg的id

1
gpg --list-secret-keys --keyid-format=long

找到sec 后的16位id

用这个id初始化库

1
pass init 你的16位ID

存入QQ邮箱的授权码,这样就将密码存入了email/qq中,可以通过对应命令直接使用

1
pass insert email/qq

写入账号

1
vim ~/.config/aerc/accounts.conf

accounts.conf是用于存入账户的配置文件

1
2
3
4
5
6
7
[Gmail]
source = imaps://你的谷歌邮箱%40gmail.com@imap.gmail.com:993
source-cred-cmd = pass email/gmail
outgoing = smtps://你的谷歌邮箱%40gmail.com@smtp.gmail.com:465
outgoing-cred-cmd = pass email/gmail
default = Inbox
from = Your Name <你的谷歌邮箱@gmail.com>

其他的同理,只是163或者qq是用授权码登入

均需要邮箱在设置中开启IMAP

开启IMAP方法

QQ邮箱

https://wx.mail.qq.com/account/index?sid=zdBvQYwiNXguM3poALpLcgAA#/?tab=safety&r=1791115046578

image-20261004200613717

安全设置->POP3/IMAP…服务 ->开启后获取授权码

163邮箱

https://mail.163.com/js6/main.jsp?sid=XLizCIjNFrNznCbZuEpjHQNaaNwKFIPu&df=mail163_letter#module=options.LinkModule%7C%7B%22link%22%3A%22option_pop3%22%7D

image-20261004201056388

之后可以直接通过下方命令来打开aerc

1
aerc

配置后台运行

aerc 本身只是终端里的一个 TUI,只有它开着的时候才能实时收邮件。我不太喜欢专门为它留一个终端标签,直接用 Hyprland 的特殊工作区把它”藏”起来更顺手:平时把 aerc 窗口丢进 magic,需要看邮件时再按一下键调出来。

我的 Hyprland 配置里已经有这两个绑定(~/.config/hypr/hyprland.lua):

1
2
3
hl.bind(mainMod .. " + " .. "S", hl.dsp.workspace.toggle_special("magic"))

hl.bind(mainMod .. " + " .. "SHIFT" .. " + " .. "Z", hl.dsp.window.move({ workspace = "special:magic" }))

对应到实际操作就是:

快捷键 作用
SUPER + SHIFT + Z 把当前 aerc 窗口丢进 magic 特殊工作区,相当于后台隐藏
SUPER + S 开关 magic,把 aerc 重新调出来

这样 aerc 只是被 Hyprland 藏起来了,进程和终端一直都在,IMAP 连接(IMAP IDLE)不会断。要看邮件时 SUPER + S 切回来即可,比额外开 tmux 或 systemd service 轻量得多。

代理问题

如果想要使用aerc来管理gmail,因为在内地本质是不允许使用的,所以需要使用代理来连接gmail

但是aerc本质是tcp直连,所以在环境变量中添加http和https的代理对这个工具并没有效果,需要本地使用tun模式让clash来管理我的全局流量

发现还是不行,查看代理规则发现是因为邮箱使用的端口993和465端口的协议优先级更高且选择是直连,所以最简单的解决办法就是添加顶部规则,直接让这两个端口的流量均使用代理

image-20261006003254911

日常使用的快捷键与指令

aerc 是纯键盘操作,所有快捷键都可以通过 ? 查看,也可以直接进入 : 命令模式执行命令。

通用

按键 作用
: 进入命令模式(输入命令后回车执行)
? 查看当前上下文的按键帮助
]t / [t 切换下 / 上一个标签页(]t 下一个、[t 上一个)
<C-t> 打开一个内嵌终端
<C-c> 退出 aerc(会弹出 Quit? 确认)
q 关闭当前视图(在列表中会询问是否退出 aerc)
<C-n> / <C-p> 切换下一个 / 上一个邮箱(账号即标签页,即 :next-tab / :prev-tab)

邮件列表

按键 作用
j / k 上/下移动光标
<Enter> 打开选中邮件
m 或 C 撰写新邮件
Rr / rr 回复 / 回复全部(带引用用 Rq / rq)
d 删除(需确认)
D 直接删除,不确认
a 归档当前邮件
<Space> 选中并跳到下一封
v 标记 / 取消标记当前邮件(整条线程用 :mark -T)
/ 搜索邮件
\ 过滤邮件列表
n / N 跳到下/上一个搜索结果
c 切换文件夹
s / S 水平/垂直分屏预览
T 切换线程视图
J / K 下一个/上一个文件夹
| 把邮件通过管道传给外部命令

阅读邮件

按键 作用
q 关闭当前邮件
o / O 用外部程序打开附件或邮件正文
S 保存附件到本地
f 转发
Rr / rr 回复 / 回复全部(带引用用 Rq / rq)
a 归档
H 切换显示完整邮件头
<C-j> / <C-k> 下一个/上一个 MIME 部分
J / K 下一封/上一封邮件
<C-l> 打开正文里的链接
<C-y> 复制正文里的链接

撰写与发送

在撰写界面 :wq 退出编辑器后会进入 review 界面,此时:

按键 作用
y 发送
n 放弃并丢弃
p 暂存为草稿
v 预览最终邮件
e 重新编辑正文与头
a 添加附件
d 移除附件
s 切换签名
x 切换加密

常用命令模式命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
:compose              撰写新邮件
:reply / :forward 回复 / 转发
:attach <文件> 添加附件
:save <路径> 保存当前邮件 / 附件到指定路径(导出)
:send 发送
:postpone 暂存为草稿
:cf <文件夹> 切换文件夹
:mkdir <文件夹> 新建文件夹
:delete / :mv / :cp 删除 / 移动 / 复制邮件
:search <关键词> 搜索
:filter <关键词> 过滤
:clear 清除搜索/过滤
:sort 排序
:toggle-threads 切换线程视图
:pipe <命令> 将邮件管道给外部命令
:open / :open-link 外部打开附件 / 链接
:term 打开终端
:quit 退出

其他舒适型配置

将 vim 配置为编辑器

aerc 撰写邮件时会调用外部编辑器,默认依次读取 $VISUAL、$EDITOR、vi。推荐在 ~/.config/aerc/aerc.conf 的 [compose] 段显式指定:

1
2
[compose]
editor = vim

也可以不改配置文件,直接通过环境变量指定:

1
export EDITOR=vim

写入 shell 配置(bash 用 ~/.bashrc,zsh 用 ~/.zshrc)后可永久生效。

aerc 撰写时生成的临时文件名为 aerc-compose-*.eml,Vim(9 及以上)会自动把它识别为 mail 文件类型并加载对应高亮。为了让写邮件更顺手,可以在 ~/.vimrc 中为 mail 类型加一些设置:

1
2
3
4
autocmd FileType mail setlocal spell spelllang=en_us
autocmd FileType mail setlocal textwidth=72
autocmd FileType mail setlocal formatoptions+=aw
autocmd FileType mail setlocal cursorline

如果 Vim 未能识别文件类型,可手动补一条自动命令:

1
autocmd BufNewFile,BufRead */aerc-compose-*.eml setfiletype mail

默认情况下收件人、主题等头部是在 aerc 的表单里填写的,只有正文交给 vim。若希望连邮件头一起在 vim 里编辑,可开启:

1
2
3
[compose]
editor = vim
edit-headers = true

此时 vim 打开的内容形如:

1
2
3
4
To: someone@example.com
Subject: 你好

正文内容……

在 vim 中写完执行 :wq 保存退出,即可回到 aerc 的 review 界面继续发送。

添加模糊搜索和通讯录

1
sudo pacman -S fzf khard
包 作用 解释
fzf 通用模糊查找器(fuzzy finder),把一堆候选项丢给它就能边打边筛 file-picker-cmd:写邮件加附件时弹窗选文件;也可作 default-menu-cmd
khard 终端通讯录管理器,读取本地 vCard 文件,能按关键词输出“邮箱+姓名” address-book-cmd:写邮件时补全收件人

配khard通讯录

1
2
mkdir -p ~/.config/khard ~/.contacts
vim ~/.config/khard/khard.conf

写入(~/.contacts 就是存放 vCard 的目录):

1
2
3
4
5
6
7
[addressbooks]
[[contacts]]
path = ~/.contacts/

[general]
editor = vim
default_action = list

新增一个联系人测试

1
khard new -a contacts

关于vCard

最简单的 vCard 只需要两个必需字段:版本和格式化姓名。

1
2
3
4
BEGIN:VCARD
VERSION:4.0
FN:张三
END:VCARD

常见可填写字段

以下是一些最常用的字段及其格式,你可以根据需求自由组合:

字段名 含义 格式示例
VERSION 版本号,必需。目前常用的是 4.0。 VERSION:4.0
FN 格式化姓名,必需。即你希望别人看到的完整称呼。 FN:张三
N 结构化姓名。依次为 姓、名、中间名、前缀、后缀,用分号 ; 隔开。 N:张;三;建国;先生;
TEL 电话号码。可附加 TYPE 参数区分类型(如 work, home)。 TEL;TYPE=work:+86-138-0000-0000
EMAIL 电子邮箱。同样可附加 TYPE 参数。 EMAIL;TYPE=work:zhangsan@example.com
ORG 组织/公司名称。可以包含多个层级,用分号隔开。 ORG:示例公司;技术部
TITLE 职位头衔。 TITLE:高级工程师
ADR 结构化地址。通常用分号分隔:邮箱/楼号;扩展地址;街道;城市;省/州;邮编;国家。 ADR;TYPE=work:;;科技园路1号;深圳市;广东省;518000;中国
BDAY 生日。格式为 yyyy-mm-dd,也可以省略年份。 BDAY:1990-01-01
NOTE 备注信息。 NOTE:这是一段备注
URL 个人或公司主页链接。 URL:https://example.com

在 ~/.config/aerc/aerc.conf 的 [compose] 段添加对应的配置:

1
2
3
[compose]
file-picker-cmd = fzf --multi --query=%s
address-book-cmd = khard email --remove-first-line --parsable %s

file-picker-cmd 让加附件时弹出 fzf 选文件,address-book-cmd 让收件人输入框支持按 Ctrl+o 补全。如果不打算维护通讯录,只保留 file-picker-cmd 这一行即可。

aerc.conf 的其他舒适型改动

除了编辑器,aerc.conf 里还开了下面这些,逐项说明作用:

段 配置 作用
[general] default-save-path = ~/下载/ 保存附件时的默认目录,不用每次输入完整路径
[ui] mouse-enabled = true 允许鼠标点击选中、滚轮滚动
[ui] threading-enabled = true 邮件按会话线程折叠显示,方便看一来一回的讨论
[compose] focus-body = true 打开撰写界面时直接聚焦正文,省一次 Tab
[compose] format-flowed = true 按 RFC3676 生成软换行正文,对方阅读更自然
[openers] application/pdf = xdg-open 阅读时按 o 用系统默认程序打开 PDF 附件
[openers] image/* = xdg-open 按 o 用系统默认图片查看器打开图片附件
[openers] text/html = firefox 按 o 用浏览器打开 HTML 部分(日常阅读走 filter,用不到它)

这些行在示例配置里默认是注释状态(行首带 #)。只在行尾把 false 改成 true 不会生效,必须把行首的 # 删掉。

快捷键自定义

~/.config/aerc/binds.conf 里加了两处:

位置 配置 作用
文件开头(全局) <A-n> / <A-p> = :switch-account -n / -p Alt+n、Alt+p 在多个账号间切换
[messages] 段 f = :forward<Enter> 在邮件列表里直接转发,省去“先进阅读界面再按 f”

[view] 段里本来就有一个 f = :forward,两者属于不同界面(列表 / 阅读),互不冲突。

注意区分:默认的 Ctrl+n / Ctrl+p(:next-tab / :prev-tab)切换的是标签页——账号、撰写、阅读等都是标签,所以切标签也能切账号,但会路过其它标签;这里的 Alt+n / Alt+p(:switch-account)则只在本账号之间循环。

改完所有配置后,在 aerc 里执行 :reload(或外部 kill -HUP $(pgrep aerc))即可生效。

常见使用场景

前面列的是”有哪些键”,这一节换成”要办一件事时具体怎么按”。下面按日常最常遇到的场景来写,跟着走一遍基本就能上手了。

1. 每天收信,快速清空收件箱

打开 aerc 后默认停在第一个账号的默认文件夹(accounts.conf 里的 default)。aerc 里每个账号就是一个标签页,所以用 Ctrl+n / Ctrl+p 切到下一个 / 上一个标签即可切换账号;文件夹用 J / K 上下切换。

单封处理:

按键 作用
j / k 上/下移动光标
Enter 打开邮件
Rr / rr 回复 / 回复全部(带引用用 Rq / rq)
a 归档当前邮件
d / D 删除(需确认)/ 直接删除

批量处理是清空收件箱的关键:

  • Space:标记当前邮件并自动跳到下一封,连续按就能勾选一批
  • v:切换当前邮件的标记状态
  • V:进入可视标记模式,用 j / k 框选一段范围
  • :mark -T:选中当前整条线程

勾选完成后直接执行命令,命令会作用在所有被标记的邮件上:

1
2
3
:archive           归档
:delete 删除
:mv <文件夹> 移动到指定文件夹

Esc 可以清除当前标记。

2. 回复 / 回复全部 / 转发

在阅读界面按:

按键 作用
Rr 回复发件人
rr 回复全部
Rq 回复(带引用)
rq 回复全部(带引用)
f 转发

注意回复默认是两键序列:单独按 r 只是在等第二键,不会有任何反应,要按完整 Rr / rr 才会真正打开回复。若想改成单键回复,在 binds.conf 里自行加 r = :reply<Enter> 即可。

image-20261006133302888

进入编辑模式,使用vim规则

在 vim 里写完正文,:wq 退出 → aerc 自动进入 review(复查)界面。
在 review 界面按 y 发送。想改就 e 重新编辑、想先放着就 p 暂存草稿、要加附件按 a(走 fzf)、要签名 s、要加密 x。

image-20261006133511310

在邮件列表里也能直接按 f 转发当前选中的邮件,不必先 Enter 进阅读界面。转发时可在 review 界面用 a 或 :attach 决定是否带上原附件。

3. 写一封新邮件并加附件

  1. 在邮件列表或阅读界面按 C(或 m)打开撰写窗口
  2. 在 To、Subject 等字段填写,Tab 在字段间切换;配了通讯录时 Ctrl+o 触发补全
  3. 正文交给 vim 编辑,写完 :wq 退出,回到 review 界面
  4. 加附件::wq 进入 review 界面后按 a(即 :attach ),再输入文件路径(支持通配符,如 ~/下载/*.pdf);想用 fzf 选文件用 :attach -m <关键词>
  5. review 界面按 y 发送、p 暂存、e 重新编辑

image-20261006133951579

4. 处理收到的附件

按键 作用
o / O 用外部程序打开(PDF / 图片走 xdg-open)
S 保存附件到 default-save-path(默认 ~/下载/)
| 把当前 MIME 部分管道给外部命令

命令模式下对应 :open、:save <路径>。

image-20261006142149699

直接打开和用imv打开均实现

5. 在邮件里查找

按键 作用
/ 在当前文件夹搜索
\ 过滤当前列表(边打边筛)
n / N 下一个 / 上一个结果
Esc 清除搜索 / 过滤

跨文件夹的正文全文检索需要 notmuch 后端,属于进阶内容,之后单独写。

6. 归档、移动、新建文件夹

  • 归档:a

  • 移动::mv <文件夹>;复制::cp <文件夹>

  • 新建文件夹::mkdir <文件夹>

  • 跨账号搬家加 -a,例如把当前邮件移到 Gmail 的 Archive:

    1
    :mv -a Gmail Archive

7. 写一半先存草稿

撰写界面按 p(:postpone)暂存为草稿;之后进 Drafts 文件夹,按 Enter 会调用 :recall 恢复继续写。这是 binds.conf 里 [messages:folder=Drafts] 段专门为草稿文件夹配的默认绑定。

8. 退订邮件列表

打开一封带 List-Unsubscribe 头的列表邮件,执行:

1
:unsubscribe

aerc 会尝试识别并给出退订方式。

9. 打开邮件里的链接

按键 作用
Ctrl+l 用浏览器打开正文里的链接
Ctrl+y 复制链接到剪贴板

依赖 [viewer] parse-http-links = true(默认开启)。

10. 标记重要邮件、改已读状态

1
2
3
4
:flag     加旗标(列表中显示 !)
:unflag 去掉旗标
:read 标记已读
:unread 标记未读

适合”看到了但暂时没空处理”的邮件,先标记着稍后再管。

11. 处理会议邀请

打开带 iCalendar 邀请的邮件后:

1
2
3
:accept             接受
:accept-tentative 暂定接受
:decline 拒绝

发送后邀请方会收到你的答复。

Contents