formats.txt
上传用户:ycwykj01
上传日期:2007-01-04
资源大小:1819k
文件大小:8k
源码类别:

网络编程

开发平台:

Unix_Linux

  1.     Mailbox Format Characteristics
  2.      Mark Crispin
  3.      5 June 1999
  4.      When a mailbox storage technology uses local files and
  5. directories directly, the file(s) and directories are layed out in a
  6. mailbox format.
  7. I. Flat-File Formats
  8.      In these formats, a mailbox and all the messages inside are a
  9. single file on the filesystem.  The mailbox name is the name of the
  10. file in the filesystem, relative to the user's "mail home directory."
  11.      A flat-file format mailbox is always a file, never a directory.
  12. This means that it is impossible to have a flat-file format mailbox
  13. that has inferior mailbox names under it (so-called "dual-usage"
  14. mailboxes).  For some inexplicable reason, some people want this.
  15.      The mail home directory is usually the same as the user login
  16. home directory if that concept is meaningful; otherwise, it is some
  17. other default directory (e.g. "C:My Documents" on Windows 98).  This
  18. can be redefined by modifying the c-client source code or in an
  19. application via the SET_HOMEDIR mail_parameters() call.
  20.      For example, a mailbox named "project" is likely to be found in
  21. the file "project" in the user's home directory.  Similarly, a mailbox
  22. named "test/trial1" (assuming a UNIX system) is likely to be found in
  23. the file "trial1" in the subdirectory "test" in the user's home
  24. directory.
  25.      Note that the name "INBOX" has special semantics and rules, as
  26. described in the file naming.txt.
  27.      The following flat-file formats are supported by c-client as of
  28. the time of this writing:
  29. . unix This is the traditional UNIX mailbox format, in use for nearly
  30. 30 years.  It uses a line starting with "From " to indicate
  31. start of message, and stores the message status inside the
  32. RFC822 message header.
  33. unix is not particularly efficient; the entire mailbox file
  34. must be read when the mailbox is open, and when reading message
  35. texts it is necessary to convert the newline convention to
  36. Internet standard CR LF form.  unix preserves UIDs, and allows
  37. the creation of keywords.
  38. Only one process may have a unix-format mailbox open
  39. read/write at a time.
  40. . mmdf This is the format used by the MMDF mailer.  It uses a line
  41. consisting of 4 <CTRL/A> (0x01) characters to indicate start
  42. and end of message.  Optionally, there may also be a unix
  43. format "From " line.  It otherwise has the same
  44. characteristics as unix format.
  45. . mbx This is the current preferred mailbox format.  It can be
  46. handled quite efficiently by c-client, without the problems
  47. that exist with unix and mmdf formats.  Messages are stored
  48. in Internet standard CR LF format.
  49. mbx permits shared access, including shared expunge.  It
  50. preserves UIDs, and allows the creation of keywords.
  51. . mtx This is supported for compatibility with the past.  This is
  52. the old Tenex/TOPS-20 mail.txt format.  It can be handled
  53. quite efficiently by c-client, and has most of the
  54. characteristics of mbx format.
  55. mtx is deficient in that it does not support shared expunge;
  56. it has no means to store UIDs; and it has no way to define
  57. keywords except through an external configuration file.
  58. . tenex This is supported for compatibility with the past.  This is
  59. the old Columbia MM format.  This is similar to mtx format,
  60. only it uses UNIX-style bare-LF newlines instead of CR LF
  61. newlines, thus incurring a performance penalty for newline
  62. conversion.
  63. . phile This is not strictly a format.  Any file which is not in a
  64. recognized format is in phile format, which treats the entire
  65. contents of the file as a single message.
  66. II. File/Message Formats
  67.      In these formats, a mailbox is a directory, and each the messages
  68. inside are separate files inside the directory.  The file names of
  69. these files are generally the text form of a number, which also
  70. matches the UID of the message.
  71.      In the case of mx, the mailbox name is the name of the directory
  72. in the filesystem, relative to the user's "mail home directory."  In
  73. the case of news and mh, the mailbox name is in a separate namespace
  74. as described in the file naming.txt.
  75.      A file/message format mailbox is always a directory.  This means
  76. that it is possible to have a file/message format mailbox that has
  77. inferior mailbox names under it (so-called "dual-usage" mailboxes).
  78. For some inexplicable reason, some people want this.
  79.      Note that the name "INBOX" has special semantics and rules, as
  80. described in the file naming.txt.
  81.      The following file/message formats are supported by c-client as of
  82. the time of this writing:
  83. . mx This is an experimental format, and may be removed in a future
  84. release.  An mx format mailbox has a .mxindex file which holds
  85. the message status and unique identifiers.  Messages are
  86. stored in Internet standard CF LF form, so the file size of
  87. the message file equals the size of the message.
  88. mx is somewhat inefficient; the entire directory must be read
  89. and each file stat()'d.  We found it intolerable for a
  90. moderate sized mailbox (2000 messages) and have more or less
  91. abandoned it.
  92. . mh This is supported for compatibility with the past.  This is
  93. the format used by the old mh program.
  94. mh is very inefficient; the entire directory must be read
  95. and each file stat()'d, and in order to determine the size
  96. of a message, the entire file must be read and newline
  97. conversion performed.
  98. mh is deficient in that it does not support any permanent
  99. flags or keywords; and has no means to store UIDs (because
  100. the mh "compress" command renames all the files, that's
  101. why).
  102. . news This is an export of the local filesystem's news spool, e.g.
  103. /var/spool/news.  Access to mailboxes in news format is read
  104. only; however, message "deleted" status is preserved in a
  105. .newsrc file in the user's home directory.  There is no other
  106. status or keywords.
  107. news is very inefficient; the entire directory must be
  108. read and each file stat()'d, and in order to determine the
  109. size of a message, the entire file must be read and newline
  110. conversion performed.
  111. news is deficient in that it does not support permanent flags
  112. other than deleted; does not support keywords; and has no
  113. expunge.
  114. Soapbox on File/Message Formats
  115.      If it sounds from the above descriptions that we're not putting
  116. too much effort into file/message formats, you are correct.
  117.      There's a general reason why file/message formats are a bad idea.
  118. Just about every filesystem in existance serializes file creation and
  119. deletions because these manipulate the free space map.  This turns out
  120. to be an enormous problem when you start creating/deleting more than a
  121. few messages per second; you spend all your time thrashing in the
  122. filesystem.
  123.      It is also extremely slow to do a text search through a
  124. file/message format mailbox.  All of those open()s and close()s really
  125. add up to major filesystem thrashing.
  126. What about Cyrus and Maildir?
  127.      Both formats are vulnerable to the filesystem trashing outlined
  128. above.
  129.      The Cyrus format used by CMU's Cyrus server (and Esys' server)
  130. has a special associated flat file in each directory that contains
  131. extensive data (including pre-parsed ENVELOPEs and BODYSTRUCTUREs)
  132. about the messages.  Put another way, it's a (considerably) more
  133. featureful form of mx.  It also uses certain operating system
  134. facilities (e.g. file/memory mapping) which are not available on older
  135. systems, at a cost of much more limited portability than c-client.
  136. These considerably ameliorate the fundamental problems with
  137. file/message formats; in fact, Cyrus is halfway to being a database.
  138. Rather than support Cyrus format in c-client, you should run Cyrus or
  139. Esys if you want that format.
  140.      The Maildir format used by qmail has all of the performance
  141. disadvantages of mh noted above, with the additional problem that the
  142. files are renamed in order to change their status so you end up having
  143. to rescan the directory frequently the current names (particularly in
  144. a shared mailbox scenario).  It doesn't scale, and it represents a
  145. support nightmare; it will therefore never be supported in the
  146. official distribution.  Maildir support code for c-client is available
  147. from third parties; but, if you use it, it is entirely at your own
  148. risk (read: don't complain about how poorly it performs or bugs).
  149. So what does this all mean?
  150.      A database (such as used by Exchange) is really a much better
  151. approach if you want to move away from flat files.  mx and especially
  152. Cyrus take a tenative step in that direction; mx failed mostly because
  153. it didn't go anywhere near far enough.  Cyrus goes much further, and
  154. scores remarkable benefits from doing so.
  155.      However, a well-designed pure database without the overhead of
  156. separate files would do even better.