summaryrefslogtreecommitdiffstats
path: root/upstream/debian-unstable/man5/maildir.maildrop.5
diff options
context:
space:
mode:
Diffstat (limited to 'upstream/debian-unstable/man5/maildir.maildrop.5')
-rw-r--r--upstream/debian-unstable/man5/maildir.maildrop.5354
1 files changed, 354 insertions, 0 deletions
diff --git a/upstream/debian-unstable/man5/maildir.maildrop.5 b/upstream/debian-unstable/man5/maildir.maildrop.5
new file mode 100644
index 00000000..c0b9e1b9
--- /dev/null
+++ b/upstream/debian-unstable/man5/maildir.maildrop.5
@@ -0,0 +1,354 @@
+'\" t
+.\"<!-- Copyright 1998 - 2007 Double Precision, Inc. See COPYING for -->
+.\"<!-- distribution information. -->
+.\" Title: maildir
+.\" Author: Sam Varshavchik
+.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
+.\" Date: 07/24/2017
+.\" Manual: Double Precision, Inc.
+.\" Source: Courier Mail Server
+.\" Language: English
+.\"
+.TH "MAILDIR" "5" "07/24/2017" "Courier Mail Server" "Double Precision, Inc\&."
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+maildir \- E\-mail directory
+.SH "SYNOPSIS"
+.sp
+$HOME/Maildir
+.SH "DESCRIPTION"
+.PP
+A
+\(lqMaildir\(rq
+is a structured directory that holds E\-mail messages\&. Maildirs were first implemented by the
+Qmail
+mail server\&. Qmail\*(Aqs maildirs were a simple data structure, nothing more than a single collection of E\-mail messages\&. The
+Courier
+mail server builds upon
+Qmail\*(Aqs maildirs to provide extended functionality, such as folders and quotas\&. This document describes the
+Courier
+mail server\*(Aqs extended maildirs, without explicitly identifying The
+Courier
+mail server\-specific extensions\&. See
+\fBmaildir\fR(5)
+in Qmail\*(Aqs documentation for the original definition of maildirs\&.
+.PP
+Traditionally, E\-mail folders were saved as plain text files, called
+\(lqmboxes\(rq\&. Mboxes have known limitations\&. Only one application can use an mbox at the same time\&. Locking is required in order to allow simultaneous concurrent access by different applications\&. Locking is often problematic, and not very reliable in network\-based filesystem requirements\&. Some network\-based filesystems don\*(Aqt offer any reliable locking mechanism at all\&. Furthermore, even bulletproof locking won\*(Aqt prevent occasional mbox corruption\&. A process can be killed or terminated in the middle of updating an mbox\&. This will likely result in corruption, and a loss of most messages in the mbox\&.
+.PP
+Maildirs allow multiple concurrent access by different applications\&. Maildirs do not require locking\&. Multiple applications can update a maildir at the same time, without stepping on each other\*(Aqs feet\&.
+.SS "Maildir contents"
+.PP
+A
+\(lqmaildir\(rq
+is a directory that\*(Aqs created by
+\m[blue]\fB\fBmaildirmake\fR(1)\fR\m[]\&\s-2\u[1]\d\s+2\&. Naturally, maildirs should not have any group or world permissions, unless you want other people to read your mail\&. A maildir contains three subdirectories:
+tmp,
+new, and
+cur\&. These three subdirectories comprise the primary folder, where new mail is delivered by the system\&.
+.PP
+Folders are additional subdirectories in the maildir whose names begin with a period: such as
+\&.Drafts
+or
+\&.Sent\&. Each folder itself contains the same three subdirectories,
+tmp,
+new, and
+cur, and an additional zero\-length file named
+maildirfolder, whose purpose is to inform any mail delivery agent that it\*(Aqs really delivering to a folder, and that the mail delivery agent should look in the parent directory for any maildir\-related information\&.
+.PP
+Folders are not physically nested\&. A folder subdirectory, such as
+\&.Sent
+does not itself contain any subfolders\&. The main maildir contains a single, flat list of subfolders\&. These folders are logically nested, and periods serve to separate folder hierarchies\&. For example,
+\&.Sent\&.2002
+is considered to be a subfolder called
+\(lq2002\(rq
+which is a subfolder of
+\(lqSent\(rq\&.
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.ps +1
+\fBFolder name encoding\fR
+.RS 4
+.PP
+Folder names can contain any Unicode character, except for control characters\&. US\-ASCII characters, U+0x0020 \- U+0x007F, except for the period, forward\-slash, and ampersand characters (U+0x002E, U+0x002F, and U+0x0026) represent themselves\&. The ampersand is represent by the two character sequence
+\(lq&\-\(rq\&. The period, forward slash, and non US\-ASCII Unicode characters are represented using the UTF\-7 character set, and encoded with a modified form of base64\-encoding\&.
+.PP
+The
+\(lq&\(rq
+character starts the modified base64\-encoded sequence; the sequence is terminated by the
+\(lq\-\(rq
+character\&. The sequence of 16\-bit Unicode characters is written in big\-endian order, and encoded using the base64\-encoding method described in section 5\&.2 of
+\m[blue]\fBRFC 1521\fR\m[]\&\s-2\u[2]\d\s+2, with the following modifications:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+The
+\(lq=\(rq
+padding character is omitted\&. When decoding, an incomplete 16\-bit character is discarded\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+The comma character,
+\(lq,\(rq
+is used in place of the
+\(lq/\(rq
+character in the base64 alphabet\&.
+.RE
+.PP
+For example, the word
+\(lqResume\(rq
+with both "e"s being the e\-acute character, U+0x00e9, is encoded as
+\(lqR&AOk\-sum&AOk\-\(rq
+(so a folder of that name would be a maildir subdirectory called
+\(lq\&.R&AOk\-sum&AOk\-\(rq)\&.
+.RE
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.ps +1
+\fBOther maildir contents\fR
+.RS 4
+.PP
+Software that uses maildirs may also create additional files besides the
+tmp,
+new, and
+cur
+subdirectories \-\- in the main maildir or a subfolder \-\- for its own purposes\&.
+.RE
+.SS "Messages"
+.PP
+E\-mail messages are stored in separate, individual files, one E\-mail message per file\&. The
+tmp
+subdirectory temporarily stores E\-mail messages that are in the process of being delivered to this maildir\&.
+tmp
+may also store other kinds of temporary files, as long as they are created in the same way that message files are created in
+tmp\&. The
+new
+subdirectory stores messages that have been delivered to this maildir, but have not yet been seen by any mail application\&. The
+cur
+subdirectory stores messages that have already been seen by mail applications\&.
+.SS "Adding new mail to maildirs"
+.PP
+The following process delivers a new message to the maildir:
+.PP
+A new unique filename is created using one of two possible forms:
+\(lqtime\&.MusecPpid\&.host\(rq, or
+\(lqtime\&.MusecPpid_unique\&.host\(rq\&.
+\(lqtime\(rq
+and
+\(lqusec\(rq
+is the current system time, obtained from
+\fBgettimeofday\fR(2)\&.
+\(lqpid\(rq
+is the process number of the process that is delivering this message to the maildir\&.
+\(lqhost\(rq
+is the name of the machine where the mail is being delivered\&. In the event that the same process creates multiple messages, a suffix unique to each message is appended to the process id; preferrably an underscore, followed by an increasing counter\&. This applies whether messages created by a process are all added to the same, or different, maildirs\&. This protocol allows multiple processes running on multiple machines on the same network to simultaneously create new messages without stomping on each other\&.
+.PP
+The filename created in the previous step is checked for existence by executing the
+\fBstat\fR(2)
+system call\&. If
+\fBstat\fR(2)
+results in ANYTHING OTHER than the system error
+ENOENT, the process must sleep for two seconds, then go back and create another unique filename\&. This is an extra step to insure that each new message has a completely unique filename\&.
+.PP
+Other applications that wish to use
+tmp
+for temporary storage should observe the same protocol (but see READING MAIL FROM MAILDIRS below, because old files in
+tmp
+will be eventually deleted)\&.
+.PP
+If the
+\fBstat\fR(2)
+system call returned
+ENOENT, the process may proceed to create the file in the
+tmp
+subdirectory, and save the entire message in the new file\&. The message saved MUST NOT have the
+\(lqFrom_\(rq
+header that is used to mboxes\&. The message also MUST NOT have any
+\(lqFrom_\(rq
+lines in the contents of the message prefixed by the
+\(lq>\(rq
+character\&.
+.PP
+When saving the message, the number of bytes returned by the
+\fBwrite\fR(2)
+system call must be checked, in order to make sure that the complete message has been written out\&.
+.PP
+After the message is saved, the file descriptor is
+\fBfstat\fR(2)\-ed\&. The file\*(Aqs device number, inode number, and the its byte size, are saved\&. The file is closed and is then immediately moved/renamed into the
+new
+subdirectory\&. The name of the file in
+new
+should be
+\(lqtime\&.MusecPpidVdevIino\&.host,S=\fIcnt\fR\(rq, or
+\(lqtime\&.MusecPpidVdevIino_unique\&.host,S=\fIcnt\fR\(rq\&.
+\(lqdev\(rq
+is the message\*(Aqs device number,
+\(lqino\(rq
+is the message\*(Aqs inode number (from the previous
+\fBfstat\fR(2)
+call); and
+\(lqcnt\(rq
+is the message\*(Aqs size, in bytes\&.
+.PP
+The
+\(lq,S=\fIcnt\fR\(rq
+part optimizes the
+\m[blue]\fBCourier\fR\m[]\&\s-2\u[3]\d\s+2
+mail server\*(Aqs maildir quota enhancement; it allows the size of all the mail stored in the maildir to be added up without issuing the
+\fBstat\fR(2)
+system call for each individual message (this can be quite a performance drain with certain network filesystems)\&.
+.SS "READING MAIL FROM MAILDIRS"
+.PP
+Applications that read mail from maildirs should do it in the following order:
+.PP
+When opening a maildir or a maildir folder, read the
+tmp
+subdirectory and delete any files in there that are at least 36 hours old\&.
+.PP
+Look for new messages in the
+new
+subdirectory\&. Rename
+\fInew/filename\fR, as
+\fIcur/filename:2,info\fR\&. Here,
+\fIinfo\fR
+represents the state of the message, and it consists of zero or more boolean flags chosen from the following:
+\(lqD\(rq
+\- this is a \*(Aqdraft\*(Aq message,
+\(lqR\(rq
+\- this message has been replied to,
+\(lqS\(rq
+\- this message has been viewed (seen),
+\(lqT\(rq
+\- this message has been marked to be deleted (trashed), but is not yet removed (messages are removed from maildirs simply by deleting their file),
+\(lqF\(rq
+\- this message has been marked by the user, for some purpose\&. These flags must be stored in alphabetical order\&. New messages contain only the
+:2,
+suffix, with no flags, indicating that the messages were not seen, replied, marked, or deleted\&.
+.PP
+Maildirs may have maximum size quotas defined, but these quotas are purely voluntary\&. If you need to implement mandatory quotas, you should use any quota facilities provided by the underlying filesystem that is used to store the maildirs\&. The maildir quota enhancement is designed to be used in certain situations where filesystem\-based quotas cannot be used for some reason\&. The implementation is designed to avoid the use of any locking\&. As such, at certain times the calculated quota may be imprecise, and certain anomalous situations may result in the maildir actually going over the stated quota\&. One such situation would be when applications create messages without updating the quota estimate for the maildir\&. Eventually it will be precisely recalculated, but wherever possible new messages should be created in compliance with the voluntary quota protocol\&.
+.PP
+The voluntary quota protocol involves some additional procedures that must be followed when creating or deleting messages within a given maildir or its subfolders\&. The
+\m[blue]\fB\fBdeliverquota\fR(8)\fR\m[]\&\s-2\u[4]\d\s+2
+command is a tiny application that delivers a single message to a maildir using the voluntary quota protocol, and hopefully it can be used as a measure of last resort\&. Alternatively, applications can use the
+libmaildir\&.a
+library to handle all the low\-level dirty details for them\&. The voluntary quota enhancement is described in the
+\m[blue]\fB\fBmaildirquota\fR(7)\fR\m[]\&\s-2\u[5]\d\s+2
+man page\&.
+.SS "Maildir Quotas"
+.PP
+This is a voluntary mechanism for enforcing "loose" quotas on the maximum sizes of maildirs\&. This mechanism is enforced in software, and not by the operating system\&. Therefore it is only effective as long as the maildirs themselves are not directly accessible by their users, since this mechanism is trivially disabled\&.
+.PP
+If possible, operating system\-enforced quotas are preferrable\&. Where operating system quota enforcement is not available, or not possible, this voluntary quota enforcement mechanism might be an acceptable compromise\&. Since it\*(Aqs enforced in software, all software that modifies or accesses the maildirs is required to voluntary obey and enforce a quota\&. The voluntary quota implementation is flexible enough to allow non quota\-aware applications to also access the maildirs, without any drastic consequences\&. There will be some non\-drastic consequences, though\&. Of course, non quota\-aware applications will not enforce any defined quotas\&. Furthermore, this voluntary maildir quota mechanism works by estimating the current size of the maildir, with periodic exact recalculation\&. Obviously non quota\-aware maildir applications will not update the maildir size estimation, so the estimate will be thrown off for some period of time, until the next recalculation\&.
+.PP
+This voluntary quota mechanism is designed to be a reasonable compromise between effectiveness, and performance\&. The entire purpose of using maildir\-based mail storage is to avoid any kind of locking, and to permit parallel access to mail by multiple applications\&. In order to compute the exact size of a maildir, the maildir must be locked somehow to prevent any modifications while its contents are added up\&. Obviously something like that defeats the original purpose of using maildirs, therefore the voluntary quota mechanism does not use locking, and that\*(Aqs why the current recorded maildir size is always considered to be an estimate\&. Regular size recalculations will compensate for any occasional race conditions that result in the estimate to be thrown off\&.
+.PP
+A quota for an existing maildir is installed by running maildirmake with the
+\-q
+option, and naming an existing maildir\&. The
+\-q
+option takes a parameter,
+\fIquota\fR, which is a comma\-separated list of quota specifications\&. A quota specification consists of a number followed by either \*(AqS\*(Aq, indicating the maximum message size in bytes, or \*(AqC\*(Aq, maximum number of messages\&. For example:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBmaildirmake \-q 5000000S,1000C \&./Maildir\fR
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+This sets the quota to 5,000,000 bytes or 1000 messages, whichever comes first\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBmaildirmake \-q 1000000S \&./Maildir\fR
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+This sets the quota to 1,000,000 bytes, without limiting the number of messages\&.
+.PP
+A quota of an existing maildir can be changed by rerunning the
+\fBmaildirmake\fR
+command with a new
+\-q
+option\&. To delete a quota entirely, delete the
+\fIMaildir\fR/maildirsize
+file\&.
+.SH "SEE ALSO"
+.PP
+\m[blue]\fB\fBmaildirmake\fR(1)\fR\m[]\&\s-2\u[1]\d\s+2\&.
+.SH "AUTHOR"
+.PP
+\fBSam Varshavchik\fR
+.RS 4
+Author
+.RE
+.SH "NOTES"
+.IP " 1." 4
+\fBmaildirmake\fR(1)
+.RS 4
+\%http://www.courier-mta.org/maildirmake.html
+.RE
+.IP " 2." 4
+RFC 1521
+.RS 4
+\%http://www.rfc-editor.org/rfc/rfc1521.txt
+.RE
+.IP " 3." 4
+Courier
+.RS 4
+\%http://www.courier-mta.org
+.RE
+.IP " 4." 4
+\fBdeliverquota\fR(8)
+.RS 4
+\%http://www.courier-mta.org/deliverquota.html
+.RE
+.IP " 5." 4
+\fBmaildirquota\fR(7)
+.RS 4
+\%http://www.courier-mta.org/maildirquota.html
+.RE