Maildir和Mailbox的区别
在开放源代码的世界里,电子邮件存储格式最流行的有两种,Mbox和Maildir,它们都是开放的存储格式,兼容性比较好
Mbox历史较Maildir悠久,sendmail支持mbox,qmail和postfix都支持mbox,其主要特点就是 "所有邮件都存放到一个文件里",每个邮件之间以特定的标记分割。
而Maildir则相反,每一封邮件保存成一个文件,每个文件名称一般有一定的规律,例如会包含时间戳、pid及inode节点号等。
除了mbox和maildir格式外,还有一个叫mbx的格式,它是对mbox的改进版本。主要用在UW-IMAPserver里。
它最大的特点是有一个针对mbox文件的索引,能改善读/写性能。但依然需要filelock。
随着qmail/postfix的普及,以及mbox的一些问题暴露,maildir得到了越来越多的应用。
其中mbox的最主要问题是文件缩定(filelock),其次是大多数update操作的效能问题。
原理:
The MboxFormat
This is thetraditional way of storing mail messages in the Unix world. In thisformat, a regular text file which serves as the mail user’s mailboxfile is created.
Fig. 1: Mboxstorage format
How Mboxworks
Receiving andstoring a mail
Retrieving amail
Deleting amail
Searching amail
Advantages
Disadvantages
The MaildirFormat
This is a newway of storing mail messages. In this format, a directory usuallynamedMaildiriscreated for each mail user. Under this directory are three moredirectories namednew,curandtmp.
Fig. 2: Maildirstorage format
How Maildirworks
Receiving andstoring a mail
Retrieving amail
Deleting amail
Searching amail
Advantages
Disadvantages
Mbox vsMaildir之优缺点比较
这里给出一个基本的特性对比,读者很容易就清楚根据自己的应用到底应该选什么存储格式:
可靠性
优选是Maildir,因为mbox只有一个文件,一旦出问题之后,所有邮件都将损毁。
更新速度
这里主要指的是删除/增加邮件的能力,无疑Maildir完胜Mbox
搜索速度
这点Mbox因为是单文件,因此搜索的能力要强于maildir
并发访问能力
对于繁忙的邮件系统,多个进程同时访问同一封邮件是可能的事情,Mbox需要flock()的支持,而且如果某一个进程操作时间长,则其他所有进程都堵塞了。Maildir没有这个问题。在NFS等网络文件系统上,Maildir相对安全,Mbox不能用于此类型环境
扩充能力
现在的邮箱已经不是5年前甚至10年前的1MB,2MB而是100,200甚至1G/2G,Mbox应付那么大的容量已力不从心,无疑Maildir是比较适合的。
文件系统依赖
Maildir较依赖文件系统,尤其是依赖对目录的索引能力,用ReiserFS会比较快,对于超大型的maildir,读写性能将受到考验。相对而言Mbox则不存在这个问题。
综合结论
推荐使用Maildir格式,安全可靠,绝大部分操作都远快于Mbox。而且现今支持Maildir的软件越来越多,qmail/Postfix都支持。?
一些有用的链接
原理标准
http://cr.yp.to/proto/maildir.html
http://www.qmail.org/qmail-manual-html/man5/mbox.html
Benchmark/比较
http://www.courier-mta.org/mbox-vs-maildir/
http://www.decisionsoft.com/pdw/mailbench.html
转换工具
http://www.qmail.org/mbox2maildir
http://batleth.sapienti-sat.org/projects/mb2md/
参考文档:
http://www.daxigua.com/archives/117
http://www.linuxmail.info/mbox-maildir-mail-storage-formats/
Maildir 格式
Maildir邮箱格式不用于mbox之处,在于它使用目录结构来存贮邮件。Maildir的设计愿意是为了解决mbox格式的可靠性与文件锁定问题。例如:如果在邮件内容还没有完全写入mbox文件之前,系统就死机了,这时候可能只有部分内容在邮箱里。当系统恢复运行,MDA将邮件写入邮箱时,新的内容会接在前次残缺的内容的后面,造成问题。
Mbox格式的另一个缺点,是发生在POP/IMAP server 与 SMTP server 试图同时开启同一个邮箱时。如果双方没有使用相同的锁定机制,邮箱文件可能因此受损。保护文件的锁定机制有好几种,但是并非所有邮件程序都使用锁定机制。如果使用maildir格式,则可以不使用文件保护锁,因为每一封邮件都是存放在单独的一个文件里。不同的邮件程序,不能同时访问同一个文件。
一个maildir的目录,有三个子目录: tmp/new/ cur/ 这些子目录与它们的上层目录必须位于同一个文件系统中,
在new/目录下的邮件文件,是MDA已经送达但是尚未被用户阅读的,用户看过邮件后,邮件文件会被转移到cur/目录。 Tmp/目录供MDA将邮件内容存储成文件,在确定全部内容都些人文件后,邮件文件会被移动到new/目录