任何基于文件的电子邮件客户端应用程序?(目的是将邮箱置于 VCS 之下。)

任何基于文件的电子邮件客户端应用程序?(目的是将邮箱置于 VCS 之下。)

比如 Subversion 就有两种后端类型:基于 BDB 和基于文件。我见过的大多数电子邮件应用程序都使用数据库后端,但数据库对于最终用户来说不太方便操作。

目前我正在使用 Thunderbird,它也使用数据库作为后端。我在四台机器上运行 Thunderbird,因此有 4 个独立的数据库。而且我有很多邮件帐户,可能有 20 个甚至更多。(不,请不要告诉我邮件转发。)因此,如果后端是基于文件的,我只需设置一个 Git 存储库并同步它们即可。但是 Thunderbird 有其内部数据库格式,因此管理这些单独的数据库非常不方便。

答案1

邮箱目录已经引入了用于存储邮件的格式,它完全按照您描述的方式进行:一条消息存储在一个单独的文件中。

并且有一些邮件客户端的 Maildir 驱动程序(后端)、一些邮件传递代理以及一些邮件访问服务器(IMAP 或 POP 或 Web 界面)。

当然,如果您的邮件存储在 Maildirs 中,最容易将其置于通常的版本控制之下。

因此,您可以寻找邮件客户端的 Maildir 后端。

但实际上,同步邮件存储可能会相当棘手比同步文件目录更简单——因为文件夹之间的各种标记(新建、已读)、标签、移动或消息副本,以及——最棘手的部分——邮件访问服务器 (IMAP) 或邮件客户端使用的服务器内部消息 ID。这些 ID 有什么用处?嗯,保留邮件存储的多个副本之间的 ID 非常重要,这样您的邮件客户端的缓存过程才能正确运行。

我已经探讨了这个问题并在这里写下了一些笔记:研究如何备份 IMAP 账户(但那时我不需要完成那个任务,所以笔记和我的实际解决方案并不完整。)

我得出的总体想法是,使用邮件客户端并简单地将 Maildirs 置于版本控制之下并不能满足您对邮件存储修订版管理的所有需求。最好将其与真正的 IMAP 服务器(远程或本地)相结合,以便统一访问邮件,并使用在 IMAP 上运行的特殊工具来同步邮件存储的不同副本/存储库/分支(特殊工具将正确处理标志、标签和 ID)。通常的版本控制可用于检查修订版和恢复到过去的修订版,但对于合并分支(= 同步),我会考虑一个更复杂的过程:

你要合并分支AB

  • C因此,您可以通过复制其中一个来准备保存合并状态的新状态(修订) ,例如,复制A到新的C
  • 然后你使用一个工具(比如“imapsync”;选择一个符合你需求的工具;我列出了一些这样的工具我的笔记)将新的变化从 B 带到 C:imapsyncBC

(这可能假设您正在通过服务器通过 IMAP 访问邮件存储)

  • 现在犯罪CA(作为合并和的结果B;在此之前,您可以在 VCS 中使用适当的命令来写下合并B到的结果信息,例如中的“ ”A之类的内容)。git merge B -s ours --no-commitC

请您自己探索细节,我只想到大致的想法,现在我并没有在实践中运行这样的程序。

我认为这是通常众所周知的实用程序所要做的一项非常有趣的任务,我想听到更多其他人想出的成功设置!


据我所知,我选择offlineimap在 Git 中备份 IMAP 账户。顺便说一下一个答案附有 的示例配置offlineimap

答案2

最好的答案是使用专为在客户端之间共享电子邮件而设计的服务器 - IMAP 服务器。几乎任何电子邮件客户端都可以访问该服务器上的电子邮件。您可以在 ubuntu 上设置自己的服务器,或者使用 Gmail,或者如果您使用 ISP 来发送电子邮件,那么该 ISP 可能会允许 IMAP 访问您的电子邮件。

相关内容