maildir.5
changeset 0 068428edee47
equal deleted inserted replaced
-1:000000000000 0:068428edee47
       
     1 .TH maildir 5
       
     2 .SH "NAME"
       
     3 maildir \- directory for incoming mail messages
       
     4 .SH "INTRODUCTION"
       
     5 .I maildir
       
     6 is a structure for
       
     7 directories of incoming mail messages.
       
     8 It solves the reliability problems that plague
       
     9 .I mbox
       
    10 files and
       
    11 .I mh
       
    12 folders.
       
    13 .SH "RELIABILITY ISSUES"
       
    14 A machine may crash while it is delivering a message.
       
    15 For both
       
    16 .I mbox
       
    17 files and
       
    18 .I mh
       
    19 folders this means that the message will be silently truncated.
       
    20 Even worse: for
       
    21 .I mbox
       
    22 format, if the message is truncated in the middle of a line,
       
    23 it will be silently joined to the next message.
       
    24 The mail transport agent will try again later to deliver the message,
       
    25 but it is unacceptable that a corrupted message should show up at all.
       
    26 In
       
    27 .IR maildir ,
       
    28 every message is guaranteed complete upon delivery.
       
    29 
       
    30 A machine may have two programs simultaneously delivering mail
       
    31 to the same user.
       
    32 The
       
    33 .I mbox
       
    34 and
       
    35 .I mh
       
    36 formats require the programs to update a single central file.
       
    37 If the programs do not use some locking mechanism,
       
    38 the central file will be corrupted.
       
    39 There are several
       
    40 .I mbox
       
    41 and
       
    42 .I mh
       
    43 locking mechanisms,
       
    44 none of which work portably and reliably.
       
    45 In contrast, in
       
    46 .IR maildir ,
       
    47 no locks are ever necessary.
       
    48 Different delivery processes never touch the same file.
       
    49 
       
    50 A user may try to delete messages from his mailbox at the same
       
    51 moment that the machine delivers a new message.
       
    52 For
       
    53 .I mbox
       
    54 and
       
    55 .I mh
       
    56 formats, the user's mail-reading program must know
       
    57 what locking mechanism the mail-delivery programs use.
       
    58 In contrast, in
       
    59 .IR maildir ,
       
    60 any delivered message
       
    61 can be safely updated or deleted by a mail-reading program.
       
    62 
       
    63 Many sites use Sun's 
       
    64 .B Network F\fPa\fBil\fPur\fBe System
       
    65 (NFS),
       
    66 presumably because the operating system vendor does not offer
       
    67 anything else.
       
    68 NFS exacerbates all of the above problems.
       
    69 Some NFS implementations don't provide
       
    70 .B any
       
    71 reliable locking mechanism.
       
    72 With 
       
    73 .I mbox
       
    74 and
       
    75 .I mh
       
    76 formats,
       
    77 if two machines deliver mail to the same user,
       
    78 or if a user reads mail anywhere except the delivery machine,
       
    79 the user's mail is at risk.
       
    80 .I maildir
       
    81 works without trouble over NFS.
       
    82 .SH "THE MAILDIR STRUCTURE"
       
    83 A directory in
       
    84 .I maildir
       
    85 format has three subdirectories,
       
    86 all on the same filesystem:
       
    87 .BR tmp ,
       
    88 .BR new ,
       
    89 and
       
    90 .BR cur .
       
    91 
       
    92 Each file in
       
    93 .B new
       
    94 is a newly delivered mail message.
       
    95 The modification time of the file is the delivery date of the message.
       
    96 The message is delivered
       
    97 .I without
       
    98 an extra UUCP-style
       
    99 .B From_
       
   100 line,
       
   101 .I without
       
   102 any
       
   103 .B >From
       
   104 quoting,
       
   105 and
       
   106 .I without
       
   107 an extra blank line at the end.
       
   108 The message is normally in RFC 822 format,
       
   109 starting with a
       
   110 .B Return-Path
       
   111 line and a
       
   112 .B Delivered-To
       
   113 line,
       
   114 but it could contain arbitrary binary data.
       
   115 It might not even end with a newline.
       
   116 
       
   117 Files in
       
   118 .B cur
       
   119 are just like files in
       
   120 .BR new .
       
   121 The big difference is that files in
       
   122 .B cur
       
   123 are no longer new mail:
       
   124 they have been seen by the user's mail-reading program.
       
   125 .SH "HOW A MESSAGE IS DELIVERED"
       
   126 The
       
   127 .B tmp
       
   128 directory is used to ensure reliable delivery,
       
   129 as discussed here.
       
   130 
       
   131 A program delivers a mail message in six steps.
       
   132 First, it
       
   133 .B chdir()\fPs
       
   134 to the
       
   135 .I maildir
       
   136 directory.
       
   137 Second, it 
       
   138 .B stat()s
       
   139 the name
       
   140 .BR tmp/\fItime.pid.host ,
       
   141 where
       
   142 .I time
       
   143 is the number of seconds since the beginning of 1970 GMT,
       
   144 .I pid
       
   145 is the program's process ID,
       
   146 and
       
   147 .I host
       
   148 is the host name.
       
   149 Third, if
       
   150 .B stat()
       
   151 returned anything other than ENOENT,
       
   152 the program sleeps for two seconds, updates
       
   153 .IR time ,
       
   154 and tries the
       
   155 .B stat()
       
   156 again, a limited number of times.
       
   157 Fourth, the program
       
   158 creates
       
   159 .BR tmp/\fItime.pid.host .
       
   160 Fifth, the program
       
   161 .I NFS-writes
       
   162 the message to the file.
       
   163 Sixth, the program
       
   164 .BR link() s
       
   165 the file to
       
   166 .BR new/\fItime.pid.host .
       
   167 At that instant the message has been successfully delivered.
       
   168 
       
   169 The delivery program is required to start a 24-hour timer before
       
   170 creating
       
   171 .BR tmp/\fItime.pid.host ,
       
   172 and to abort the delivery
       
   173 if the timer expires.
       
   174 Upon error, timeout, or normal completion,
       
   175 the delivery program may attempt to
       
   176 .B unlink()
       
   177 .BR tmp/\fItime.pid.host .
       
   178 
       
   179 .I NFS-writing
       
   180 means
       
   181 (1) as usual, checking the number of bytes returned from each
       
   182 .B write()
       
   183 call;
       
   184 (2) calling
       
   185 .B fsync()
       
   186 and checking its return value;
       
   187 (3) calling
       
   188 .B close()
       
   189 and checking its return value.
       
   190 (Standard NFS implementations handle
       
   191 .B fsync()
       
   192 incorrectly
       
   193 but make up for it by abusing
       
   194 .BR close() .)
       
   195 .SH "HOW A MESSAGE IS READ"
       
   196 A mail reader operates as follows.
       
   197 
       
   198 It looks through the
       
   199 .B new
       
   200 directory for new messages.
       
   201 Say there is a new message,
       
   202 .BR new/\fIunique .
       
   203 The reader may freely display the contents of
       
   204 .BR new/\fIunique ,
       
   205 delete
       
   206 .BR new/\fIunique ,
       
   207 or rename
       
   208 .B new/\fIunique
       
   209 as
       
   210 .BR cur/\fIunique:info .
       
   211 See
       
   212 .B http://pobox.com/~djb/proto/maildir.html
       
   213 for the meaning of
       
   214 .IR info .
       
   215 
       
   216 The reader is also expected to look through the
       
   217 .B tmp
       
   218 directory and to clean up any old files found there.
       
   219 A file in
       
   220 .B tmp
       
   221 may be safely removed if it
       
   222 has not been accessed in 36 hours.
       
   223 
       
   224 It is a good idea for readers to skip all filenames in
       
   225 .B new
       
   226 and
       
   227 .B cur
       
   228 starting with a dot.
       
   229 Other than this, readers should not attempt to parse filenames.
       
   230 .SH "ENVIRONMENT VARIABLES"
       
   231 Mail readers supporting
       
   232 .I maildir
       
   233 use the
       
   234 .B MAILDIR
       
   235 environment variable
       
   236 as the name of the user's primary mail directory.
       
   237 .SH "SEE ALSO"
       
   238 mbox(5),
       
   239 qmail-local(8)