Monthly Archives: April 2013

转换mbox邮件格式到maildir格式

想做这个转换很久了,但是一直懒得动。今天想找一个邮件来看看,由于mbox格式是一个大单个文件,所以我只好打开了一个100M+的文件然后搜索我想看的关键字。这个时候突然想把mbox换成maildir了,一封邮件一个文件,看起来方便些。最近愿意折腾,就折腾吧。

先大概说一下两种存储邮件的格式mbox和maildir,简单来说,mbox把同一个mailbox下(比如我把Server上bugzilla目录下的邮件都通过procmail投放到同一个mailbox里)的所有邮件都存放在一个文件中,而maildir格式则把同一个mailbox里的邮件存放到一个目录里,每一个邮件都是一个单独的文件。一般来说maildir格式要优于mbox格式,原因就两个字:无锁。具体关于两种格式看网上的说明吧,很多。

这次迁移主要参考了这篇文章,关于mutt的设置参考了这篇文章

总的来说,转换分成两个部分,一是把mbox格式的文件转换成maildir格式的文件布局,这个工作可以通过mb2md这个工具完成,fedora18上直接yum install mb2md即可安装;二是修改相应的配置文件,我这里主要是procmailrc和muttrc。

首先来转换邮件格式。

# backup your mail dir
mv .mail .mail.bak
# convert by using mb2md
mb2md -s ~/.mail.bak -d .mail

就是这么简单! -s指定source dir,-d指定输出的dir。如果source里还有目录层级结构,可以考虑使用-R参数。

然后就是修改各种配置文件了。我这里就是.procmailrc和.muttrc两个文件。修改之前别忘了先把fetchmail进程杀掉。

# contents of .procmailrc needed to update
MAILDIR=~/.mail  # all my mails are in this dir
DEFAULT=$MAILDIR/mbox/ # it's the trailing slash here that tells procmail to use maildir format
# all your rules in procmailrc need to be updated to add a trailing slash at the end of each mailbox
:0
* ^(From):.*bugzilla@redhat\.com
bugzilla/
# the only thing I modified in muttrc is mbox_type
set mbox_type=maildir

修改完成之后启动mutt,启动fetchmail,感觉上没什么变化。但是后来发现了一个maildir格式的缺点,占用更多的空间。原来单个文件存放,文件数很少,现在每个邮件一个文件,很多都不到4K大小但都要消耗4K的空间。du的结果表明,mbox的时候总大小是1.6G,现在是1.9G.不过现在硬盘这么便宜,忍了吧。