maildirmake.html.in
上传用户:s81996212
上传日期:2007-01-04
资源大小:722k
文件大小:15k
源码类别:

WEB邮件程序

开发平台:

C/C++

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
  2.                       "http://www.w3.org/TR/REC-html40/loose.dtd">
  3. <html>
  4. <head>
  5.   <title>maildirmake - create maildirs, and maildir folders</title>
  6.   <!-- $Id: maildirmake.html.in,v 1.1 2000/05/07 17:14:24 mrsam Exp $ -->
  7.   <!-- Copyright 1998 - 2000 Double Precision, Inc.  See COPYING for -->
  8.   <!-- distribution information. -->
  9.   <!-- SECTION 1 -->
  10.   <meta http-equiv="Content-Type" content="text/html">
  11. </head>
  12. <body text="#000000" bgcolor="#FFFFFF" link="#0000EE" vlink="#551A8B"
  13. alink="#FF0000">
  14. <h1>maildirmake - create maildirs, and maildir folders</h1>
  15. <h2>SYNOPSIS</h2>
  16. <pre>maildirmake [ options ] <i>maildir</i></pre>
  17. <h2>DESCRIPTION</h2>
  18. <p>The <code>maildirmake</code> command is used to create Maildirs, and
  19. Maildir folders.  This <code>maildirmake</code> command also creates several
  20. extensions to the base Maildir format.</p>
  21. <p>A Maildir is a directory that's used to store mail messages.  Not just any
  22. directory will do - a Maildir must be of a specific structure, and have
  23. specific access permissions.  The <code>maildirmake</code> command is a
  24. convenient way to create a new Maildir, or a new folder within an existing
  25. Maildir, with the correct permission and structure.</p>
  26. <h2>OPTIONS</h2>
  27. <ul>
  28.   <li><code>-S</code> - create a "sharable" maildir.  A sharable maildir has
  29.     slightly different permissions which allows creating publicly-shared
  30.     folders.<br>
  31.     <br>
  32.   </li>
  33.   <li><code>-f folder</code> - do not create a maildir, but create a folder in
  34.     an existing maildir.<br>
  35.     <br>
  36.   </li>
  37.   <li><code>-s <i>mode</i></code> - create a publicly accessible folder in an
  38.     existing sharable maildir.  First, use the <code>-S</code> option to
  39.     create a sharable maildir, then use the <code>-s</code> option to create
  40.     publicly accessible folders. "<i>mode</i>" is a comma-separated list of
  41.     the following keywords: <code>read</code> - readonly folder, only you can
  42.     write messages to this folder; <code>write</code> - anyone can read and
  43.     write messages to this folder; <code>group</code> - only allow members of
  44.     your own system group to access messages in this folder (instead of
  45.     everyone).<br>
  46.     <br>
  47.   </li>
  48.   <li><code>--add <i>name=/shared/maildir/path</i></code>, <code>--del
  49.     <i>name</i></code> - create or delete the directories and links needed to
  50.     access shared folders.  See below for more information.</li>
  51. </ul>
  52. <h2>FOLDERS</h2>
  53. <p>This <code>maildirmake</code> command supports enhanced maildirs that
  54. contain folders.</p>
  55. <p>By itself, <code>maildirmake</code> makes a new subdirectory
  56. <i>maildir</i>, and creates all the necessary structures. The -f option
  57. creates a new "folder" within an existing <i>maildir</i>. <i>maildir</i> must
  58. already exist, and the <code>maildirmake</code> command will create a new
  59. folder inside it.</p>
  60. <p>Folders are simply subdirectories inside the main maildir whose names start
  61. with a period, and which are themselves maildirs. For example, the command
  62. "<code>maildirmake -f Drafts mail/Maildir</code>" creates
  63. <code>mail/Maildir/.Drafts</code>, with the usual <code>tmp</code>,
  64. <code>new</code>, and <code>cur</code>. You MUST use the -f option, instead of
  65. specifying <code>mail/Maildir/.Drafts</code> directly, in order to correctly
  66. initialize certain enhanced maildir features.</p>
  67. <p>Folders cannot be created directly within other folders.  Running
  68. <code>maildirmake -f Urgent mail/Maildir/.Drafts</code> will not work.
  69. Instead, the period character is designated as a hierarchy separator, run
  70. <code>maildirmake -f Drafts.Urgent mail/Maildir</code> instead. This creates
  71. <code>mail/Maildir/.Drafts.Urgent</code>, and all mail software that supports
  72. enhanced maildirs will interpret it as a subfolder Urgent of the Drafts
  73. folder.</p>
  74. <h2>SHARED FOLDERS</h2>
  75. <p>This is another extension to the Maildir format that allows folders to be
  76. shared between multiple clients.  First, you need to create a collection of
  77. sharable folders, as a separate maildir:</p>
  78. <pre>   maildirmake -S /usr/local/share/maildirs/notices</pre>
  79. <p>Then, you create individuals folders that will be accessed in shared
  80. mode:</p>
  81. <pre>   maildirmake -s write -f Weekly /usr/local/share/maildirs/notices</pre>
  82. <p>The "Weekly" folder is created, with read/write access to everyone.
  83. Multiple folders can be created in the same maildir, with different access
  84. permissions. Everyone can create a sharable maildir.  The access privileges
  85. for individual folders are set by the <code>-s</code> option, and are
  86. implemented using traditional filesystem permissions.</p>
  87. <p>Use the <i>--add</i> and <i>--del</i> options to add a sharable maildir to
  88. an existing maildir.  Client software that implement this extension will now
  89. know where to find sharable folders:</p>
  90. <pre>   maildirmake --add notices=/usr/local/share/maildirs/notices $HOME/Maildir</pre>
  91. <i>$HOME/Maildir</i> is your main maildir. The argument to <code>-add</code>
  92. is <i>nick=path</i>. <i>nick</i> is the nickname you give to the collection of
  93. all the sharable folders, and <i>path</i> is the location of the sharable
  94. maildir. All folders in the sharable maildir that you have access to -- such
  95. as "Weekly", in this case, will now be accessible by compliant software.
  96. Multiple sharable maildirs can be added, by giving each one a unique name.
  97. <p>The <code>--del</code> option "disconnects" the sharable maildir from your
  98. main maildir.</p>
  99. <h2>GLOBAL SHARED FOLDERS</h2>
  100. <p>Normally the <i>-add</i> command must be run for every maildir which needs
  101. to access a sharable maildir. Alternatively the file
  102. <code>@sysconfdir@/maildirshared</code> can be created, which will be used for
  103. a default set of sharable maildirs. Each line in this file takes the following
  104. form:</p>
  105. <pre>      nick&lt;tab>path</pre>
  106. <p><i>nick</i> is a short nickname for the sharable maildir, <i>&lt;tab></i>
  107. is a single tab character, <i>path</i> is the pathname to the sharable
  108. maildir.</p>
  109. <h2>ACCESSING SHARED FOLDERS</h2>
  110. <p>You may have read or write access to a shared folder. If you have write
  111. access, you can add messages to the shared folder. You can also delete
  112. messages that you've added, but nobody else's.</p>
  113. <p>Anyone can create a sharable maildir, so if the sharable maildir is
  114. actually created by you, can can delete any message, not just your own.</p>
  115. <h2>MAILDIR STRUCTURE</h2>
  116. <p>The rest of this manual page is a technical description of Maildirs. The
  117. first implementation and definition of Maildirs were in Dan Bernstein's Qmail
  118. mail server, and it described a single, flat, mail repository.  Since then,
  119. independent developers added additional features on top of it, such as folders
  120. and voluntary mail quotas.  This document describes the enhanced Maildir
  121. implementation without noting the specific enhancements to the original
  122. Maildir implementation. See <a
  123. href="http://www.qmail.org/man/man5/maildir.html">http://www.qmail.org/man/man5/maildir.html</a>
  124. for the original specifications of Maildirs.</p>
  125. <p>Maildirs offer several improvements over traditional mailbox files. Unlike
  126. mailbox files, no locking is necessary in order to deliver new messages to
  127. maildirs, or to read mail in maildirs.  Multiple agents can deliver new mail
  128. to maildirs, in parallel, and read mail from maildirs.  Locking is often
  129. problematic with certain network file system.  Maildirs require no locking,
  130. and can be implemented on top of almost any file system.</p>
  131. <p>A maildir is an ordinary subdirectory, with group and world access
  132. permissions revoked, of course.  A maildir contains three subdirectories:
  133. <code>tmp</code>, <code>new</code>, and <code>cur</code>. Folders are
  134. additional subdirectories whose names begin with a period: such as
  135. <code>.Drafts</code> or <code>.Sent</code>.  Each folder itself contains the
  136. same three subdirectories, <code>tmp</code>, <code>new</code>, and
  137. <code>cur</code>, and can be thought of as a maildir in of itself, except that
  138. it itself cannot contain nested folder subdirectories, as explained above.</p>
  139. <p>A folder subdirectory also contains an extra, zero-length file named
  140. <code>maildirfolder</code>, whose purpose is to simply inform any mail
  141. delivery agent that it really is delivery directly to a subfolder, and that
  142. the mail delivery agent should look in the parent directory for any required
  143. housekeeping information. Software that uses maildirs may also create
  144. additional files besides the <code>tmp</code>, <code>new</code>, and
  145. <code>cur</code> subdirectories -- in the main maildir or a folder
  146. "submaildir" -- for their own use.</p>
  147. <p>E-mail messages are stored in separate, individual files as defined below,
  148. one E-mail message per file. The <code>tmp</code> subdirectories is used to
  149. temporarily store E-mail messages that are in the process of being delivered
  150. to this maildir.  It can also be used for storing other kinds of temporary
  151. files, as long as they follow the same naming convention for creating new
  152. files in <code>tmp</code>. The <code>new</code> subdirectory stores messages
  153. that have been delivered to this maildir, but have not yet been seen by any
  154. mail application. The <code>cur</code> subdirectory stores messages that have
  155. already been seen by mail applications.</p>
  156. <h2>DELIVERING NEW MAIL TO A MAILDIR</h2>
  157. <p>The following process is used to deliver mail to a maildir:</p>
  158. <p>A new unique filename is created using one of two possible forms:
  159. "time.pid.host", or "time.pid_unique.host".  "time" is the current system
  160. time, in seconds.  "pid" is the process number of the process that is
  161. delivering this message to the maildir. "host" is the name of the machine
  162. where the mail is being delivered.  In the event that the same process will
  163. create multiple messages, it should append a unique suffix to the process id,
  164. preferrably an underscore, followed by an increasing counter. This applies
  165. whether messages created by a process are all in the same, or different,
  166. maildirs. This protocol allows multiple processes running on multiple machines
  167. on the same network to simultaneously create new messages without stomping on
  168. each other.</p>
  169. <p>The filename created in the previous step is checked for existence by
  170. executing the <i>stat(2)</i> system call, against the <code>tmp</code>
  171. subdirectory.  If the result of the <i>stat</i> system call is ANYTHING OTHER
  172. than the system error <code>ENOENT</code>, the process must sleep for two
  173. seconds, then go back and create a new unique filename.  This is an extra step
  174. to insure that each new message has a completely unique filename.</p>
  175. <p>Other applications that wish to use <code>tmp</code> for temporary storage
  176. should observe the same protocol (but see READING MAIL FROM MAILDIRS below,
  177. because old files in <code>tmp</code> will be eventually deleted).</p>
  178. <p>If the <i>stat</i> system call returned <code>ENOENT</code>, the process
  179. can go ahead, create the file in the <code>tmp</code> subdirectory, and save
  180. the entire message in the new file.  The message saved MUST NOT have the
  181. traditional "From_" line that is used to separate individual messages in the
  182. traditional mailbox files.  The message also MUST NOT have any "From_" lines
  183. in the contents of the message prefixed by the ">" character, as messages in
  184. traditional mailbox files are.</p>
  185. <p>Saving the message means to reliably save it in a file.  The number of
  186. bytes returned by the <code>write</code> system call must be checked, in order
  187. to make sure that the complete message has been written out.</p>
  188. <p>After the message is saved, the file is closed and is then immediately
  189. moved/renamed into the <code>new</code> subdirectory.  The name of the file
  190. should be the same name it had in the <code>tmp</code> subdirectory.</p>
  191. <p>It is HIGHLY RECOMMENDED that new implementations of software that creates
  192. messages in maildirs would also append the suffix ",S=nnn" to the name of the
  193. file when it is moved into the <code>new</code> subdirectory, where "nnn"
  194. represents the size of the message, in bytes.  This optimizes the voluntary
  195. maildir quota enhancement, as it permits the size of all the mail stored in
  196. the maildir to be added up without issuing the <code>stat</code> system call
  197. for each individual message (which can be quite a performance drain with
  198. certain network filesystems).</p>
  199. <h2>READING MAIL FROM MAILDIRS</h2>
  200. <p>Applications that read mail from maildirs should do it in the following
  201. order:</p>
  202. <p>When opening a maildir or a maildir folder, read the <code>tmp</code>
  203. subdirectory and delete anything in there that's at least 36 hours old.</p>
  204. <p>Look for new messages in the <code>new</code> subdirectory.  For each new
  205. message found, <i>new/filename</i>, rename it as <i>cur/filename:2,info</i>,
  206. where <i>info</i> is used to represent the state of the message, and it
  207. consists of zero or more boolean flags chosen from the following: R - this
  208. message has been replied to, S - this message has been viewed (seen), T - this
  209. message has been marked to be deleted (trashed), but is not yet completely
  210. removed (messages are removed from maildirs simply by deleting their file), F
  211. - this message has been marked by the user, for some purpose. These flags must
  212. be stored in alphabetic order.  New messages contain only the <i>:2,</i>
  213. suffix, with no flags, indicating that the messages haven't been seen,
  214. replied, marked, or deleted.</p>
  215. <p>Maildirs may have maximum size quotas defined, but these quotas are purely
  216. voluntary.  If you need to implement mandatory quotas, you should use any
  217. quota facilities provided by the underlying filesystem that is used to store
  218. the maildirs.  The maildir quota enhancement is designed to be used in certain
  219. situations where filesystem-based quotas cannot be used for some reason.  The
  220. implementation is designed to avoid the use of any locking.  As such, at
  221. certain times the calculated quota may be imprecise, and certain anomalous
  222. situations may result in the maildir actually going over the stated quota. One
  223. such situation would be when applications create messages without updating the
  224. quota estimate for the maildir.  Eventually it will be precisely recalculated,
  225. but wherever possible new messages should be created in compliance with the
  226. voluntary quota protocol.</p>
  227. <p>The voluntary quota protocol involves some additional procedures that must
  228. be followed when creating or deleting messages within a given maildir or its
  229. subfolders.  The <a href="maildirquota.html">deliverquota(8)</a> command is a
  230. tiny application that delivers a single message to a maildir using the
  231. voluntary quota protocol, and hopefully it can be used as a measure of last
  232. resort.  Alternatively, applications can use the <code>libmaildir.a</code>
  233. library to handle all the low-level dirty details for them. The voluntary
  234. quota enhancement is specified in a separate README.</p>
  235. <h2>SEE ALSO</h2>
  236. <a href="maildrop.html">maildrop(1),</a> <a
  237. href="maildirquota.html">maildirquota(8),</a> <a
  238. href="deliverquota.html">deliverquota(8),</a> <a
  239. href="maildropfilter.html">maildropfilter(1)</a>, <a
  240. href="http://www.qmail.org/man/man5/maildir.html">http://www.qmail.org/man/man5/maildir.html</a>,
  241. maildir(5).</body>
  242. </html>