以 Maildir 方式备份邮件
2023 年就这么过去了。AIGC 的出现让很多事情发生了改变。我使用搜索引擎的频率急剧降低,连查阅维基百科的次数也少了很多。AI 使得学习一些新的领域的门槛变得非常低,虽然它帮我打开了探索新世界的大门。但另一方面,不知道为什么我的表达欲也下降了很多。我觉得很多东西不再需要记录。大部分东西已经埋藏在那几千万亿的参数里。
十二月底,我没有像以往一样做点年终总结。相反,我翻了翻很多以往留下的文字、项目的备份。清理了网盘、NAS,把没用的东西都删除掉了。
有一些老帐号上的邮件我想把它们下载到本地,打包备份起来。我没像以往打开 Google 搜索别人总结的备份方案。而是很自然地打开 ChatGPT,询问了常见的邮件备份格式,其中 MailDir 以它及其简洁的方案吸引了我。只需要建立一个目录,里面再建三个空目录cur
, new
and tmp
即可。
Mails
└── your-account
├── cur
├── new
└── tmp
然后 ChatGPT 还向我推荐了一些常用的支持 MailDir 的邮件备份工具,我选中了简单易用的 Getmail6 (v6 是使用 python3 实现的版本)。同时 ChatGPT 还根据我的需求提供了相应的 POP3 配置案例: ~/.config/getmail/getmailrc
[retriever]
type = SimplePOP3Retriever
server = your.pop3.server.here
username = your_username_here
password = your_password_here
port = 110
[destination]
type = Maildir
path = ~/Mails/your-account-folder
[options]
read_all = false
delete = false
配置完后,在终端运行 $ getmail
即可开始下载邮件,因为配置了 read_all = false
与 delete = false
所以是纯备份模式,服务器上的邮件不会被改动。运行期间如果主动 Ctrl-c
终止运行,getmail 会将已下载的邮件 id 写入到 ~/.config/getmail/oldmail-host-port-your-accout
文件中,避免下次运行的时候重复下载。
但是如果期间出现服务器连接超时,getmail 似乎没能将缓存的数据写入文件中。这会导致重新运行 getmail 会重复下载邮件。以往遇到这样的事,往往要花很多时间去想办法处理。但现在有 ChatGPT,我只需要简单描述一下应当如何清理重复的邮件,它很快便能编写出一段 Shell 脚本来完成任务,用后即扔。
#!/bin/bash
# 创建一个空的临时文件来存储 Message-ID 和文件名的映射
temp_file=$(mktemp)
# 递归地遍历包含邮件的目录及其子目录
find /path/to/your/emails/ -type f -print0 | while IFS= read -r -d '' file; do
# 提取 Message-ID 并将其与文件名一起添加到临时文件
msg_id=$(grep "Message-ID:" "$file" | cut -d ' ' -f 2)
echo "$msg_id $file" >> "$temp_file"
done
# 对临时文件进行排序
sort "$temp_file" -o "$temp_file"
# 使用 awk 处理重复的 Message-ID,保留第一个,删除其余的
awk '{if ($1 != last) {last = $1; next} print $2}' "$temp_file" | xargs rm
# 清理临时文件
rm "$temp_file"
花絮:ChatGPT 第一次给我的脚本会把所有重复的文件都删除,一个副本也没有留下。不过我在 Review 代码的时候特地留心看它怎么处理这个问题,结果发现它没处理。于是让它马上纠正了。
经过一个多小时,总算把 1500+ 邮件备份到本地了。中间清理重复邮件也算顺利。每个邮件正文和附件使用 MIME 格式以文本的形式存在 MailDir 的目录中。但是要怎么浏览它们呢?ChatGPT 向我推荐了一些命令行工具,其中 NeoMutt 深得我心。虽然 NeoMutt 客户端也可以配置邮件服务器进行收发邮件,但是我只需要它的浏览 MailDir 的功能。最重要的是,它可以零配置直接使用:
$ neomutt -f ~/Mails/your-account
NeoMutt 是一个纯命令行工具,非常易用。它还能帮你将 MIME 里的邮件附件导出到文件系统。超级给力!
ChatGPT 在我不熟悉的领域提供了极大的帮助,也改变了我的工作流程。2024年,期待 AIGC 更强大的功能。