Mail 正在囤积你收到过的每一个附件
Mac 的 Mail 会为你添加过的每个账户保留完整的邮件和附件缓存,包括几年前就移除的账户。这里说清楚 ~/Library/Mail 存了什么,以及哪些内容可以放心清理。
更多同类指南目前仅提供英文版本。 查看全部文章
如果你用同一批账户使用 Apple Mail 已经好几年了,这个数字通常会让人吃惊:
du -sh ~/Library/Mail
对于连接了几个邮箱账户一段时间的人来说,10–30 GB 是很正常的,尤其是当其中有账户经常收到体积较大的附件时——发票、设计文件、以附件而不是链接方式发送的照片。
为什么会这么大:Mail 把所有东西都在本地留了一份
Apple Mail 会为每一个已配置的账户下载并缓存每一封邮件、每一个附件的本地副本,无限期保留,以便离线访问和快速搜索。和按需拉取的网页邮箱客户端不同,Mail 的整体设计就假定你希望所有内容都能离线使用——这确实很有用,但存储成本会随着年头悄悄累积起来。
# See which account is actually responsible for the size
du -sh ~/Library/Mail/V*/*/ 2>/dev/null | sort -hr
带版本号的 V* 文件夹(V9、V10 等,随着 macOS/Mail
数据库格式变化而递增)里,每个已配置的账户都对应一个子文件夹,用内部标识符命名——如果需要把某个文件夹对应到具体账户,可以去
Mail → 设置 → 账户里核对。
具体到已下载的附件
对大多数人来说,附件是单项占用最大的部分,Mail 会在邮件数据库之外,另外为它们保留一份独立缓存:
du -sh ~/Library/Containers/com.apple.mail/Data/Library/Mail\ Downloads
这个文件夹里存放的是你在 Mail 里打开过或保存过的附件——如果你需要的内容已经另外保存过了,清空它是安全的,因为原始邮件里附件依然存在,随时可以重新打开:
rm -rf ~/Library/Containers/com.apple.mail/Data/Library/Mail\ Downloads/*
几年前就移除的账户,数据可能还缓存着
这是大多数人没想到的一点:从 Mail 设置里移除一个邮箱账户,并不总能立刻、彻底地清空它的本地缓存。如果你换过工作、关闭过旧邮箱地址,或者换过邮件服务商,可以检查一下 Mail 是不是还在保留那个账户的完整邮件历史:
# List every account folder currently on disk, whether or not it's
# still configured in Mail → Settings → Accounts
ls ~/Library/Mail/V*/
把这个结果和 Mail 设置里当前实际的账户列表做对比。没有对应任何活跃账户的文件夹可以放心删除——先退出
Mail,然后只删除对应账户的那个子文件夹,而不是整个 V* 目录。
如果之后搜索感觉不对,重建索引
Mail 会在原始邮件数据之外维护一个搜索索引(Envelope Index)。如果清理之后 Mail
的搜索开始表现异常——或者跟清理完全无关,因为这种情况偶尔也会自己发生——重建索引是标准的修复方法,而且不会动到你的实际邮件内容:
# Quit Mail first
rm ~/Library/Mail/V*/MailData/Envelope\ Index*
# Relaunch Mail — it rebuilds the index automatically, which can take
# several minutes for a large mailbox
什么是不能碰的
你正在使用的账户对应的子文件夹里,保存着供离线访问的实际邮件内容——这和本博客里讲到的其他缓存都不一样,因为对 IMAP 账户来说,邮件在邮件服务器上也有一份,但对纯本地邮箱(一些老的 POP 设置,或者“此电脑上的邮件”邮箱)来说,本地这份可能是唯一的一份。在假设“全部删掉、让它重新同步”这种做法安全之前,先确认你的账户类型——对 IMAP 账户来说通常是安全的(Mail 会从服务器重新下载),但对“此电脑上的邮件”邮箱来说不是。
这在你磁盘的整体格局里处于什么位置
只要你还在收带附件的邮件,Mail 就是一项持续增长的真实成本,在性质上更接近 Photos,而不是开发者的构建缓存——它是你可能真的想要的真实数据,而不是纯粹的副产品。唯一真正安全、不需要费心判断的清理目标,是你已经在别处保存过的附件,以及旧账户遗留下来的数据,这两项上面都已经讲过。
DevCruft 是一款正在开发中的免费 Mac 应用,设计上会把 Mail 的存储占用和其他所有内容一起显示在地图上,让它成为一个已知的、有明确大小的数量,而不是深埋在
~/Library/Containers
三层目录之下、大多数人根本想不到要去检查的文件夹。想在它推出时收到通知,可以加入候补名单。
关于 iMessage 附件的类似情况,可以看看Messages 存储指南。