我正在考虑导入几千个 Thunderbird 文件夹的想法,每个文件夹当然包含许多电子邮件,作为一组 Emacs 的 Gnus 邮件组。每个邮件组名称都来自文件夹层次结构。由于数量的原因,这项工作会相当乏味,所以如果可能的话,我会自动化这个大规模的导入。
在可用的后端中,nnfolder在这种情况下似乎是最有前途的。我认为从 Gnus 中填充邮件组会更好。否则,我必须彻底了解nnfolder格式,而这可能需要多次迭代才能真正正确。此外,随着电子邮件的不断涌入,迭代可能会变得难以在不丢失任何东西的情况下正确组织。
我想我必须重新设置所有内容,在所选邮件组是 Thunderbird 来源的函数的约束下,覆盖标准的 Gnus 选择机制。过去我做过一些 Gnus 编码,但是由于我已经十几年没有接触 Emacs,所以一切都非常生疏。对于如何尽可能高效和快速地完成这项任务,我有点迷茫。所以我的问题是:你会如何处理它?还是我应该更深入地探索一些聪明的 Gnus 隐藏角落?:-)
弗朗索瓦
PS在我写完这个问题后,我发现 Gnus 有一个很好的帮助功能实现这个目标。这个想法是首先复制~/Mail
目录中的所有 Thunderbird 文件夹文件,因为它们是用于内容的,但正确重命名。完成此操作后,M-x nnfolder-generate-active-file
立即为每个复制的文件夹编辑内容,保留~
备份,生成 NOV 数据,创建一个邮件组,当然还有调整~/Mail/active
文件。
为了复制目录下的文件夹~/.thunderbird/LOGIN/Mail/Local Folders/
,我编写了一个小的 Python 脚本。它忽略所有文件,并在目录中.msf
递归。.sbd
相对于 的文件夹路径名称将Local Folders/
其所有.sbd/
字符串转换为句点以生成邮件组名称,还小写,将空格和下划线转换为破折号,并适当地处理其他特殊字符。特别是,非 ASCII 字符处理不当,nnfolder在这里和那里混淆 UTF-8 和 ISO-8859-1。该脚本还必须跳过msgfilterrules.dat
和可能drafts
,junk
等等。
我注意到两个需要注意的细节:
- Thunderbird 本身可用于在复制文件夹之前压缩文件夹,否则可能会不情愿地恢复已删除的邮件。
(setq nnmail-use-long-file-names t)
~/.emacs
在整个操作之前需要。
批量转换中止,说它无法解密其中一条消息。我将有问题的文件夹移开,然后,冗长的操作成功了。