请输入您要查询的百科知识:

 

词条 Maildir
释义

  1. Specifications

      Maildir    Maildir++  

  2. Technical operation

  3. Filesystem Compatibility Issues

  4. Software that supports Maildir directly

      Mail servers    Delivery agents    Mail readers  

  5. Notes and references

  6. See also

  7. External links

The Maildir e-mail format is a common way of storing e-mail messages, where each message is kept in a separate file with a unique name, and each folder is a directory. The local filesystem handles file locking as messages are added, moved and deleted. A major design goal of Maildir is to eliminate program code having to handle locking, which is often difficult.[1]

Specifications

A Maildir directory (often named Maildir) usually has three subdirectories named tmp, new, and cur.

Maildir

The original Maildir specification was written by Daniel J. Bernstein, the author of qmail, djbdns, and other software. Although the original specification was written specifically for Bernstein's qmail, it is general enough to be implemented in many programs.

Maildir++

Sam Varshavchik, the author of the Courier Mail Server and other software, wrote an extension[3][4] to the Maildir format called Maildir++ to support subfolders and mail quotas. Maildir++ directories contain subdirectories with names that start with a '.' (dot) that are also Maildir++ folders. This extension is not a violation of the Maildir specification, which explicitly provides for the possibility to add more than tmp, new, cur to a maildir.

Technical operation

The program that delivers an email message, a mail delivery agent, writes it to a file in the tmp directory with a unique filename.[6][3] Circa 1995, the algorithm recommended for generating unique filenames was to concatenate, separated by the period character, the current Unix time, the current process identifier (PID), and the current hostname; and to delay delivery for two seconds if a file with that name was found to already exist.[1] (This algorithm was criticised in 2006 by Timo Sirainen, the creator of Dovecot.[9]) By 2000, it was recommended to append, to the PID, the value of a per-process counter whose value should be incremented after each delivery; and the rate-limiting suggestion had been dropped. By 2003, the recommendations had been further amended to require that instead of the PID and counter, the middle part of the filename should be created by "concatenating enough of the following strings to guarantee uniqueness" even in the face of multiple simultaneous deliveries to the same maildir from one or more processes:[11]

  • #n, where n is (in hexadecimal) the output of the operating system's unix_sequencenumber() system call, which returns a number that increases by 1 every time it is called, starting from 0 after reboot.
  • Xn, where n is (in hexadecimal) the output of the operating system's unix_bootnumber() system call, which reports the number of times that the system has been booted. Together with #, this guarantees uniqueness; unfortunately, most operating systems don't support unix_sequencenumber() and unix_bootnumber.
  • Rn, where n is (in hexadecimal) the output of the operating system's unix_cryptorandomnumber() system call, or an equivalent source such as /dev/urandom. Unfortunately, some operating systems don't include cryptographic random number generators.
  • In, where n is (in hexadecimal) the UNIX inode number of this file. Unfortunately, inode numbers aren't always available through NFS.
  • Vn, where n is (in hexadecimal) the UNIX device number of this file. Unfortunately, device numbers aren't always available through NFS. (Device numbers are also not helpful with the standard UNIX filesystem: a maildir has to be within a single UNIX device for link() and rename() to work.)
  • Mn, where n is (in decimal) the microsecond counter from the same gettimeofday() used for the left part of the unique name.
  • Pn, where n is (in decimal) the process ID.
  • Qn, where n is (in decimal) the number of deliveries made by this process.

As of November 2018, Bernstein had made no further changes to these filename generation recommendations.[12]

The delivery process stores the message in the maildir by creating and writing to tmp/uniquefilename, and then moving this file to new/uniquefilename. The moving can be done using rename, which is atomic in many systems.[13] Alternatively, it can be done by hard linking the file to new and then unlinking the file from tmp. Any leftover file will eventually be deleted. This sequence guarantees that a maildir-reading program will not see a partially written message. There can be multiple programs reading a maildir at the same time. They range from mail user agents (MUAs) which access the server's file system directly, through Internet Message Access Protocol or Post Office Protocol servers acting on behalf of remote MUAs, to utilities such as biff and rsync, which may or may not be aware of the maildir structure. Readers should never look in tmp.

When a cognizant maildir reading process (either a POP or IMAP server, or a mail user agent acting locally) finds messages in the new directory it must move them to cur. It is just a means to notify the user "you have X new messages".[14] This moving needs to be done using rename(), as the non-atomic link then unlink technique may result in duplicated messages. An informational suffix is appended to filenames at this stage. It consists of a colon (to separate the unique part of the filename from the actual information), a '2', a comma and various flags. The '2' specifies the version of the information that follows the comma. '2' is the only currently officially specified version, '1' being an experimental version. The specification defines flags which show whether the message has been read, deleted and so on: the initial (capital) letter of Passed, Replied, Seen, Trashed, Draft, and Flagged.[11] Dovecot uses lowercase letters to match 26 IMAP keywords,[6] which may include standardised keywords, such as $MDNSent, and user defined flags.

Although Maildir was intended to allow lockless usage, in practice some software that uses Maildirs also uses locks, such as Dovecot.[17]

Filesystem Compatibility Issues

The Maildir standard can only be implemented on systems that accept colons in filenames.

Systems that don't allow colons in filenames (This includes Microsoft Windows and some configurations of Novell Storage Services.) can use an alternative separator, such as ";", or "-". It is often trivial to patch free and open source software to use a different separator.[18]

As there is currently no agreement on what character this alternative separator should be, there can be interoperability difficulties between different Maildir-supporting programs on these systems. However, not all Maildir-related software needs to know what the separator character is, because not all Maildir-related software needs to be able to read or modify the flags of a message ("read", "replied to" etc.); software that merely delivers to a Maildir, or archives old messages from it based only on date, should work no matter what separator is in use. If only the MUA needs to read or modify message flags, and only one is used, then non-standard alternative separators may be used without interoperability problems.

Software that supports Maildir directly

Mail servers

  • Dovecot IMAP server
  • Courier Mail Server SMTP and IMAP server, for which the Maildir++ format was invented
  • Exim SMTP server
  • Postfix SMTP server
  • Qmail SMTP server, for which the Maildir format was invented
  • MeTA1 SMTP server
  • OpenSMTPD SMTP server

Delivery agents

  • procmail
  • Dovecot delivery agent
  • maildrop
  • getmail, a Maildir-aware mail-retrieval and delivery agent alternative to Fetchmail
  • fdm
  • OfflineIMAP

Mail readers

  • Balsa previously the official GNOME mail reader (prior to Evolution)
  • Cone a curses-based mail reader
  • Evolution, official GNOME mail client
  • GNUMail
  • Gnus
  • KMail, KDE mail reader
  • mailx
  • Mutt
  • Mozilla Thunderbird

Notes and references

1. ^{{cite web |first=Daniel J. |last=Bernstein. |author-link=Daniel J. Bernstein |year=2003|url=http://cr.yp.to/proto/maildir.html |title=Using maildir format |archive-url=https://web.archive.org/web/20030401082238/https://cr.yp.to/proto/maildir.html |archive-date=2003-04-01 |orig-year=The earliest version of this document was first published in 2000 or earlier |dead-url=no |access-date=2018-11-23}}
2. ^{{cite web |url=https://web.archive.org/cdx/search/cdx?url=cr.yp.to/proto/maildir.html |publisher=Internet Archive |access-date=2018-11-23 |title=Wayback Machine snapshots of cr.yp.to/proto/maildir.html |year=2018}}
3. ^{{cite web |url=http://www.courier-mta.org/maildir.html |title=maildir |author=Sam Varshavchik |year=2009 |access-date=24 July 2016}}
4. ^{{cite mailing list |url=http://www.mail-archive.com/courier-users@lists.sourceforge.net/msg38512.html |title=Management of maildir structures |date=25 July 2016 |accessdate=26 July 2016 |mailing-list=courier-users |author=Sam Varshavchik }}
5. ^{{cite web |url=http://www.courier-mta.org/imap/README.maildirquota.html |title=Maildir++ |author=Sam Varshavchik |year=2011 |access-date=24 July 2016}}
6. ^Dovecot Wiki: maildir format
7. ^mutt maildir support: workaround for filesystems that don't accept colons
8. ^{{cite web |url=https://wiki2.dovecot.org/MailboxFormat/Maildir?action=diff&rev1=11&rev2=12 |title=Diff for 'MailboxFormat/Maildir' |first=Timo |last=Sirainen |author-link=Timo Sirainen |access-date=2018-11-23 |date=2006-12-05}}
9. ^{{cite web |url=https://wiki2.dovecot.org/MailboxFormat/Maildir?action=diff&rev1=13&rev2=14 |title=Diff for 'MailboxFormat/Maildir' |first=Timo |last=Sirainen |author-link=Timo Sirainen |access-date=2018-11-23 |date=2006-12-05}}
10. ^{{cite web |url=http://pubs.opengroup.org/onlinepubs/9699919799/functions/rename.html |title=rename |author= |year=2013 |publisher=The Open Group |access-date=23 July 2016 |quote=That specification requires that the action of the function be atomic.}}
11. ^{{cite web |archive-url=https://web.archive.org/web/19971012032244/http://www.qmail.org:80/qmail-manual-html/man5/maildir.html |url=http://www.qmail.org/qmail-manual-html/man5/maildir.html |first=Daniel J. |last=Bernstein |author-link=Daniel J. Bernstein |title=maildir(5) |archive-date=1997-10-12 |year=1995 |access-date=2018-11-23 |dead-url=no}}
[1][2][3][4][5][6][7][8][9][10][11]
}}

See also

  • mbox
  • MH Message Handling System
  • MIX (email)

External links

  • manual page for maildir
  • maildir specifications

1 : Email storage formats

随便看

 

开放百科全书收录14589846条英语、德语、日语等多语种百科知识,基本涵盖了大多数领域的百科知识,是一部内容自由、开放的电子版国际百科全书。

 

Copyright © 2023 OENC.NET All Rights Reserved
京ICP备2021023879号 更新时间:2024/11/13 13:35:39