周一,9:30。收件箱满了。大部分邮件都不需要回复——通讯订阅、通知、服务更新,还有一整周里你一直在沟通的客户又发来的邮件。你不需要仔细阅读它们,也不需要回复——它们只需要被放进正确的文件夹里,这样收件箱才不会变成一个杂物抽屉。
最干净的状态就是一个空的收件箱:所有到达的邮件都被分类好了,每封邮件都待在它该在的地方。想找跟某位客户的来往,就在那个客户的文件夹里;想看去年的发票,就在「发票」里。没有一堆未读,也不用一直往下滑。
大多数邮件甚至都不需要打开——发件人和主题已经告诉你它该去哪里。但每一封都还得用鼠标拖到正确的文件夹里。每封邮件几秒钟,几十封邮件——天天如此。
Apple Mail 在展示邮件方面很出色。它在一件事上很糟糕:快速处理它们。没有「把这个发件人的所有邮件都移到这里」的快捷键。没有「一键删除整个会话」。在文件夹树里拖来拖去就是你的极速。
Sortail 做什么
Sortail 是一个停在 Apple Mail 旁边的浮动面板。Mail 处于活动状态时它出现,你切换到别处时它隐藏。它不取代 Mail,也不打开自己的客户端——它只是一个快速操作的遥控器。
三个动作——Move、Delete、Archive——每个都在三个层级上工作:单封邮件、整个会话,或一次处理某个发件人的全部邮件。
一个典型场景:某位客户这周发来了 15 封邮件——任务讨论、附件、约定。以前:按住 shift 点击选中它们,拖进客户文件夹,祈祷没漏。现在:轻点一下「Move Sender」,这 15 封一步到位地落进正确的文件夹。一条早已尘埃落定的长会话——「Delete Thread」,从头到尾干干净净。
当你把一封邮件移进某个文件夹时,Sortail 会记住:这个发件人 → 那个文件夹。下一封来自同一发件人的邮件,组合框里已经预填好了那个文件夹——你按 Move,邮件就到了它该去的地方。不用猜测,不用再用鼠标在文件夹树里到处找。
Mark as Read on move 是一个可选开关,这样收件箱会自动清理掉已读项。
这不是 AI,也不是分类器。Sortail 不会试图阅读你的邮件,然后替你决定怎么处理。它只是加快你自己已经在做的决定。
所有账户,一个地方
在 Mail.app 里一切都是碎片化的。你有工作用的 Gmail、家庭用的 iCloud、订阅通讯用的一个 IMAP 账户,再加上一个——舍不得扔掉的大学旧邮箱。每个都有自己的文件夹结构,而这些结构互不相交。当你想把东西放进「Travel」时,试着回忆这个文件夹是在四个账户中的哪一个里。
Sortail 同时跨所有账户工作。文件夹组合框把它们并排列出——[work] Travel、[icloud] Travel、[old-imap] Travel——你选中正确的那个。当你执行「Move Sender」时,Sortail 会遍历每一个账户,无论那个发件人的邮件在哪儿都把它们找出来,并移到你选定的文件夹——即便这位发件人同时给你的 Gmail 和 iCloud 写过信。
对于 Gmail 账户,Sortail 还会通过 Gmail API 直接和 Google 通信。这意味着「Archive」会按 Gmail 期望的方式归档——移除 INBOX 标签,把邮件留在 All Mail 里——而不是常见 IMAP 客户端把副本扔进本地「Archive」文件夹的那种做法。
独立应用,不是插件
项目开始时我做出的最大架构决策:Sortail 不是 Mail 的插件。不是扩展、不是 Mail Extension、不是加载到 Mail 进程里的 bundle。
从历史上看,Mail 插件都会死。Apple 拥有 Mail 进程,会时不时改动它的内部实现——或者关闭 API。MailHub——很多人至今还在搜索「MailHub 替代品」的那个——就是一个插件。在某次 macOS 更新之后,它对所有用户同时停止了工作。
Sortail 的构建方式不同。它是一个独立的应用程序,通过公开接口与 Mail 通信:命令使用 AppleScript,元数据使用 Mail 的本地数据库(Envelope Index),Gmail 账户使用 Gmail API。这些接口已经稳定了几十年。Apple 官方支持基于它们构建第三方集成,且不会在 macOS 版本之间破坏它们。
这在实际中意味着:当 Apple 推出下一个 macOS 时,Sortail 会继续工作。没有紧急补丁,没有「请给我们几天时间修复兼容性」。
它适合谁
Sortail 适合那些自己整理邮件、并希望速度更快的人。
它不适合想要完全自动化收件箱或新邮件客户端的人。它也只针对 Apple Mail——不支持 Spark、Mimestream 和 Airmail。