可以在 Internet 上找到有关此主题的一些反思。没有(很容易找到)回答了这个问题,特别是对于那些不熟悉这两种格式的人。
Mozilla wiki 上的相关文章在其第一段中指出:“Thunderbird 的 maildir 实现允许每封电子邮件有一个唯一的文件名 (EML)。但是,请注意这不是完整的 maildir,因为大多数人,尤其是 linux 用户或邮件管理员,都知道 maildir。” 因此,据推测,Thunderbird 的股票转换器没有提供适当的解决方案。
Dovecot推荐, dsync但它大概是专门为 dovecot 开发的。我想停止使用 Thunderbird,但我现在不打算使用 Dovecot,它的 wiki 提到了一些“Maildir++”。Dovecot 还推荐(同上)mb2md.pl一些 Dovecot 自己的补丁。mb2md似乎是一般推荐的。
但是,在其存储库中有两种实现mb2md:sh+Python 脚本和Perl 脚本。前者是最初的实现,它的页面字面上写着关于 Perl 版本的以下内容:“如果你在我的脚本中遇到这个特殊的 [看似荒谬的与环境相关的琐碎] 问题,请尝试一下 [Perl 实现]”,以及没有其他的。目前尚不清楚这两个脚本是否以相同的方式运行,甚至支持相同的语法。(简要检查表明它没有;为什么要使用相同的名称呢?)据报道,Python 版本是 2006 年的,至今已有 10 多年的历史。碰巧我使用的发行版(Gentoo)似乎没有mb2md。我可以安装 Dovecot 并使用它的转换器,但这感觉不对。
尽管这件事可能是微不足道的(mbox 只不过是 eml 的字符串连接,对吗?),以上所有内容都令人震惊:对于一个 10 多年的旧格式 (Maildir),被广泛认为优于 mbox,显然没有标准迁移机制。我不想盲目转换,后来才发现某些数据丢失了,正如mb2md页面警告的那样,或者我无法在不丢失一致性的情况下向新的 Maildir 存储添加更多消息,如mbsync 手册页中所述(搜索短语“本地方案更快”)。
作为记录,我打算将 mbsync 与新的 Maildir 存储一起使用。希望答案不取决于此。
mb2md转换器在现代 mboxen 上是否能像在 2006 年一样正常工作?Mail,ImapMail,News和Feeds子目录,其中,又包含其他文件。是INBOX文件的唯一MBOX文件,否则我可能会错过一些人?mb2md单独转换每个 mbox 文件,我是否必须以某种方式手动连接或将它们分组到 Maildir 存储中?mb2md版本之间进行选择时应该考虑什么?假设,为了完整起见,Thunderbird 大量使用了标签、PGP 加密和各种形式的签名。wbob 的答案很有用且详细。然而,在 wbob 建议 dovecot 转换之前,我使用了不同的解决方案。此外,我最终没有太多存储空间。我必须接受我自己的答案,因为这毕竟是被使用的。
我使用了一个利用mailbox库的简单 Python 脚本。(感谢notmuchfreenode 上的 IRC 频道。)
#!/usr/bin/python3
import mailbox
import sys
import os
mbox_filename = sys.argv[1]
maildir_root_dir_name = sys.argv[2]
mbox = mailbox.mbox(mbox_filename, create=False)
mailbox_name = os.path.basename(mbox_filename)
maildir_dir_name = "/".join((maildir_root_dir_name, mailbox_name))
os.mkdir(maildir_dir_name, mode=0o750)
mdir = mailbox.Maildir(maildir_dir_name, create=True)
os.mkdir("/".join((maildir_dir_name, "cur")), mode=0o750)
os.mkdir("/".join((maildir_dir_name, "new")), mode=0o750)
os.mkdir("/".join((maildir_dir_name, "tmp")), mode=0o750)
count = 0
for x in mbox:
print(x.get_from())
count += 1
if count % 1000 == 0:
print(count)
mdir.add(x)
Run Code Online (Sandbox Code Playgroud)
有些消息被破坏了;脚本因错误和行号而停止,因此我必须使用 emacs(我相信使用 vlf 来打开大文件)来修复 mbox 文件中的有问题的消息。
这个问题值得更详细的回答,因为对于大多数用户来说完成这个任务是相当麻烦的。希望我将来能扩展这个。
| 归档时间: |
|
| 查看次数: |
3472 次 |
| 最近记录: |