INTRODUCTION

       maildir	is  a structure	for directories	of incoming mail messages.  It
       solves the reliability problems that plague mbox	files and mh  folders.


RELIABILITY ISSUES

       A  machine  may	crash while it is delivering a message.	 For both mbox
       files and mh folders this means that the	message	will be	silently trun-
       cated.  Even worse: for mbox format, if the message is truncated	in the
       middle of a line, it will be silently joined to the next	message.   The
       mail  transport	agent will try again later to deliver the message, but
       it is unacceptable that a corrupted message should show up at all.   In
       maildir,	every message is guaranteed complete upon delivery.

       A  machine  may have two	programs simultaneously	delivering mail	to the
       same user.  The mbox and	mh formats require the programs	 to  update  a
       single  central	file.	If the programs	do not use some	locking	mecha-
       nism, the central file will be corrupted.  There	are several  mbox  and
       mh  locking  mechanisms,	 none of which work portably and reliably.  In
       contrast, in maildir, no	locks are ever necessary.  Different  delivery
       processes never touch the same file.

       A  user	may try	to delete messages from	his mailbox at the same	moment
       that the	machine	delivers a new message.	 For mbox and mh formats,  the
       user's  mail-reading program must know what locking mechanism the mail-
       delivery	programs use.  In contrast, in maildir,	any delivered  message
       can be safely updated or	deleted	by a mail-reading program.

       Many  sites  use	Sun's Network Failure System (NFS), presumably because
       the operating system vendor does	not offer anything else.  NFS  exacer-
       bates  all  of the above	problems.  Some	NFS implementations don't pro-
       vide any	reliable locking mechanism.  With mbox and mh formats, if  two
       machines	 deliver  mail	to the same user, or if	a user reads mail any-
       where except the	delivery machine, the user's mail is at	risk.  maildir
       works without trouble over NFS.


THE MAILDIR STRUCTURE

       A directory in maildir format has three subdirectories, all on the same
       filesystem: tmp,	new, and cur.

       Each file in new	is a newly delivered mail message.   The  modification
       time  of	 the file is the delivery date of the message.	The message is
       delivered without an extra UUCP-style From_  line,  without  any	 >From
       quoting,	 and  without  an extra	blank line at the end.	The message is
       normally	in RFC 822 format, starting with  a  Return-Path  line	and  a
       Delivered-To  line,  but	 it  could  contain arbitrary binary data.  It
       might not even end with a newline.

       Files in	cur are	just like files	in new.	 The big  difference  is  that
       files  in cur are no longer new mail: they have been seen by the	user's
       mail-reading program.


HOW A MESSAGE IS DELIVERED

       The delivery program is required	to start a 24-hour timer before	creat-
       ing  tmp/time.pid.host, and to abort the	delivery if the	timer expires.
       Upon error, timeout, or normal completion,  the	delivery  program  may
       attempt to unlink() tmp/time.pid.host.

       NFS-writing  means  (1) as usual, checking the number of	bytes returned
       from each write() call; (2) calling fsync()  and	 checking  its	return
       value;  (3)  calling  close() and checking its return value.  (Standard
       NFS implementations handle fsync() incorrectly but make up  for	it  by
       abusing close().)


HOW A MESSAGE IS READ

       A mail reader operates as follows.

       It  looks  through  the new directory for new messages.	Say there is a
       new message, new/unique.	 The reader may	freely display the contents of
       new/unique, delete new/unique, or rename	new/unique as cur/unique:info.
       See http://pobox.com/~djb/proto/maildir.html for	the meaning of info.

       The reader is also expected to look through the tmp  directory  and  to
       clean  up  any  old  files  found  there.   A file in tmp may be	safely
       removed if it has not been accessed in 36 hours.

       It is a good idea for readers to	skip all  filenames  in	 new  and  cur
       starting	 with  a  dot.	Other than this, readers should	not attempt to
       parse filenames.


ENVIRONMENT VARIABLES

       Mail readers supporting maildir use the MAILDIR environment variable as
       the name	of the user's primary mail directory.


SEE ALSO

       mbox(5),	qmail-local(8)



				       5		     s/qmail:(maildir)

Man(1) output converted with man2html