Maildir

Das Maildir Email Format ist ein häufiger Speichermöglichkeit Email Nachrichten, in denen jede Nachricht in einem separaten gespeichert ist Datei Mit einem eindeutigen Namen und jedem E -Mail -Ordner ist ein Dateisystemverzeichnis. Die lokale Dateisystem Griffe Dateisperrung Wenn Nachrichten hinzugefügt werden, bewegt und gelöscht. Ein wichtiges Designziel von Maildir besteht darin, die Notwendigkeit von Programmcode zu beseitigen, um Dateisperrung und Entsperren zu verarbeiten.[1]

Interne Struktur

Spezifikationen

Ein Maildir Verzeichnis (oft benannt Maildir) hat normalerweise drei Unterverzeichnisse benannt TMP, Neu, und cur.

Das TMP Unterverzeichnis speichert vorübergehend E-Mail-Nachrichten, die gerade geliefert werden. Dieses Unterverzeichnis kann auch andere Arten von temporären Dateien speichern. Das Neu Unterverzeichnis speichert Nachrichten, die übermittelt wurden, aber noch nicht von einer E -Mail -Bewerbung gesehen wurden. Das cur Unterverzeichnis speichert Nachrichten, die bereits von E -Mail -Bewerbungen gesehen wurden.[2]

Maildir ++

Sam Varshavchik, der Autor des Courier Mail Server und andere Software schrieb eine Erweiterung[2][3] zum Maildir -Format genannt Maildir ++ Um Unterordner und Mail -Quoten zu unterstützen. MailDir ++ - Verzeichnisse enthalten Unterverzeichnisse mit Namen, die mit einem '.' (dot), die auch MailDir ++ Ordner sind. Diese Erweiterung entspricht der MailDIR -Spezifikation, die ausdrücklich die Möglichkeit bietet, mehr als TMP, neu, Cur zu einem MailDir hinzuzufügen.

Technischer Betrieb

A Mail -Liefervertreter ist ein Programm Dies liefert eine E -Mail -Nachricht in ein Maildir. Der Mail -Liefervertreter erstellt eine neue Datei mit einem eindeutigen Dateinamen in der TMP Verzeichnis.[4][5][2] Der ursprüngliche Algorithmus um 1995 zur Generierung einzigartiger Dateinamen, wie sie implementiert werden von qmail[1] war:

  1. Lesen Sie den Strom Unix -Zeit
  2. Lesen Sie den Strom Prozesskennung (PID)
  3. Lesen Sie den Strom Hostname
  4. Verkettieren Sie die obigen drei Werte in eine von der getrennte Zeichenfolge Periodencharakter; Dies ist der neue Dateiname
  5. wenn stat () Berichte, dass der Dateiname existiert, und warten Sie dann zwei Sekunden
  6. Gehen Sie zum vorherigen Schritt, bis der Dateiname nicht existiert
  7. Erstellen Sie eine Datei mit dem eindeutigen Dateinamen und schreiben Sie den Nachrichteninhalt in die neue Datei

Bis zum Jahr 2000 empfahl der Autor von Qmail, den Wert eines pro-Prozess-Zählers an die PID anzuhängen, deren Wert nach jeder Lieferung inkrementiert werden sollte, und der ratenlimitierende Vorschlag wurde gesenkt.[4]

Bis 2003 wurden die Empfehlungen weiter geändert, um zu verlangen, dass anstelle der PID und des Schalters der mittlere Teil des Dateinamens durch "Verkettung genug von den folgenden Saiten zur Gewährleistung der Einzigartigkeit" selbst angesichts mehrerer gleichzeitiger Lieferungen an die geschaffen werden sollte Gleicher Maildir aus einem oder mehreren Prozessen:[6]

  • #n, wo n ist (in hexadezimal) die Ausgabe des Betriebssystems unix_sequencenumber () Systemaufruf, der eine Zahl zurückgibt, die jedes Mal, wenn er aufgerufen wird, um 1 erhöht, ab 0 nach dem Neustart.
  • Xn, wo n ist (in hexadezimal) die Ausgabe des Betriebssystems UNIX_BOOTNUMBER () Systemaufruf, bei dem das System gebootet wurde. Zusammen mit #garantiert diese Einzigartigkeit; Leider unterstützen die meisten Betriebssysteme nicht unix_sequencenumber () und UNIX_BOOTNUMBER ().
  • Rn, wo n ist (in hexadezimal) die Ausgabe des Betriebssystems UNIX_CryptorandomNumber () Systemaufruf oder eine äquivalente Quelle, wie z. /dev/urandom. Leider enthalten einige Betriebssysteme keine kryptografischen Zufallszahlengeneratoren.
  • In, wo n ist (in hexadezimal) die Unix Inode Anzahl dieser Datei. Leider sind Inode -Zahlen nicht immer durch NFS.
  • Vn, wo n ist (in hexadezimal) die UNIX -Gerätenummer dieser Datei. Leider sind Gerätenummern nicht immer über NFS verfügbar. (Gerätenummern sind auch nicht hilfreich mit dem Standard -UNIX -Dateisystem: Ein Maildir muss in einem einzigen Unix -Gerät für sein Verknüpfung() und umbenennen() arbeiten.)
  • Mn, wo n ist (im Dezimal) der Mikrosekundenzähler aus demselben GetTimeofday () Wird für den linken Teil des eindeutigen Namens verwendet.
  • Pn, wo n ist (in Dezimal) die Prozess -ID.
  • Qn, wo n ist (in Dezimal) die Anzahl der Lieferungen, die durch diesen Prozess erstellt wurden.

Dieser Algorithmus wurde 2006 von kritisiert Timo Sirainen, der Schöpfer von DEVECOT, als unnötig komplex.[7]

Ab November 2018 der Qmail -Autor Daniel Bernstein hatte keine weiteren Änderungen an Empfehlungen für die Dateinamengeneration vorgenommen.[8] Auf modernen Possix -Systemen, temporäre Dateien kann sicher mit dem erstellt werden MkStemp C -Bibliotheksfunktion.

Der Lieferprozess speichert die Nachricht im MailDir, indem er erstellt und schreibt an TMP/UniqueFileNameund dann diese Datei auf verschieben auf neuer/UniqueFileName. Die Bewegung kann verwendet werden umbenennen, was in vielen Systemen atomar ist.[9] Alternativ kann es durch erledigt werden durch hartnäckig die Datei zu Neu und dann die Datei von der Datei abnehmen TMP. Jede übrig gebliebene Datei wird schließlich gelöscht. Diese Sequenz garantiert, dass ein Maildir-Lesen-Programm keine teilweise geschriebene Nachricht angezeigt wird. Gleichzeitig können mehrere Programme ein Maildir lesen. Sie reichen von E -Mail -Benutzeragenten (MUAS), die direkt auf das Dateisystem des Servers zugreifen Internet -Nachrichtenzugriffsprotokoll oder Postprotokoll Server, die im Namen der Remote -MUAs handeln, für Versorgungsunternehmen wie z. Biff und rsync, die sich der Maildir -Struktur bewusst sein kann oder nicht. Die Leser sollten niemals hineinschauen TMP.

Wenn ein Kenntnis von Maildir-Reading-Prozess (entweder a POP oder IMAP Server oder ein E -Mail -Benutzer -Agent, der lokal handelt) findet Nachrichten in der Neu Verzeichnis, es muss Bewegen Sie sie zu cur. Es ist nur ein Mittel, um den Benutzer zu benachrichtigen "Sie haben X neue Nachrichten".[10] Diese Bewegung muss verwendet werden umbenennen()als Nichtatomar Link-then-nicht-Verbindung Die Technik kann zu doppelten Nachrichten führen. In dieser Phase wird ein Informationssuffix an Dateinamen beigefügt. Es besteht aus a Doppelpunkt (Um den einzigartigen Teil des Dateinamens von den tatsächlichen Informationen zu trennen), a "2", a Komma und verschiedene Flaggen. Das "2" gibt die Version der Informationen an, die dem Komma folgen. "2" ist die einzige derzeit offiziell angegebene Version, "1" eine experimentelle Version. Die Spezifikation definiert Flags, die zeigen, ob die Nachricht gelesen, gelöscht wurde und so weiter: Der anfängliche (Kapital-) Buchstaben von "bestanden", "antwortete", "gesehen", "verwirrt", "Entwurf" und "markiert".[6] Dovecot verwendet Kleinbuchstaben, um 26 IMAP -Schlüsselwörter zu übereinstimmen.[5] Dies kann standardisierte Schlüsselwörter wie $ enthaltenMdnsentund benutzerdefinierte Flags.

Obwohl Maildir beabsichtigt war, locker nicht zu nutzen, verwendet einige Software, die MailDirs verwendet, auch Schlösser wie Dovecot.[11]

Probleme mit der Dateisystemkompatibilität

Der MailDir -Standard kann nur auf Systemen implementiert werden, die Kolons in Dateinamen akzeptieren.

Systeme, die Colons in Dateinamen nicht zulassen (dies beinhaltet Microsoft Windows und einige Konfigurationen von Novell Storage Services) kann ein alternatives Trennzeichen wie "" verwenden; oder "-". Es ist oft trivial zu patpattern Kostenlose und Open-Source-Software einen anderen Trennzeichen verwenden.[12]

Da es derzeit keine Einigung darüber gibt, welcher Charakter dieses alternative Trennzeichen sein sollte, kann es zu Interoperabilitätsschwierigkeiten zwischen verschiedenen MailDir-Supporting-Programmen auf diesen Systemen kommen. Allerdings müssen nicht alle von der MailDir bezogenen Software wissen, was der Trennzeichencharakter ist, da nicht alle von der MailDir bezogenen Software in der Lage sein müssen, die Flags einer Nachricht zu lesen oder zu ändern ("lesen", auf "usw.); Software, die lediglich an einen MailDir oder archiven alten Nachrichten von IT liefert, die nur auf Datum basieren, sollte unabhängig von dem Trennzeichen funktionieren. Wenn nur die Mua muss Nachrichtenflags lesen oder ändern, und nur ein MUA wird verwendet, dann können nicht standardmäßige alternative Trennscheider ohne Interoperabilitätsprobleme verwendet werden.

Software, die MailDir direkt unterstützt

Mail -Server

Lieferagenten

Mail -Leser

  • AERC[13] (Effizienter und erweiterbarer E -Mail -Client)
  • Balsa Früher der offizielle Gnome -Mail -Leser (vor Evolution)
  • Cone a Curse-basierte Mail-Leser
  • Evolution, offizieller Gnome -Mail -Client
  • Gnumail
  • Gnus
  • Kmail, KDE Mail -Leser
  • Mailx
  • Köter
  • Wenig[14] (Schnelle, globale Such- und Tag-basierte E-Mail-System)
  • Kiefer/Alpine
  • Mozilla Thunderbird - experimentell und "standardmäßig deaktiviert, weil es noch viele Fehler gibt" [15]

Notizen und Referenzen

  1. ^ a b Bernstein, Daniel J. (1995). "Maildir (5)". Archiviert von das Original Am 1997-10-12. Abgerufen 2018-11-23.
  2. ^ a b c Sam Varshavchik (2009). "Maildir". Abgerufen 24. Juli 2016.
  3. ^ Sam Varshavchik (2011). "MailDir ++". Abgerufen 24. Juli 2016.
  4. ^ a b Bernstein., Daniel J. (c. 2000) [Erst veröffentlicht 2000 oder früher]. "Verwenden von MailDir -Format". Archiviert vom Original am 2000-09-02. Abgerufen 2018-11-23.
  5. ^ a b Dovecot Wiki: MailDir -Format
  6. ^ a b Bernstein., Daniel J. (2003) [Die früheste Version dieses Dokuments wurde erstmals im Jahr 2000 oder früher veröffentlicht]. "Verwenden von MailDir -Format". Archiviert vom Original am 2003-04-01. Abgerufen 2018-11-23.
  7. ^ Sirainen, Timo (2006-12-05). "Diff für 'MailboxFormat/MailDir' '". Abgerufen 2018-11-23. All diese Probleme sind ziemlich sinnlos. Nur der erste Schritt garantiert wirklich, dass die Mails nicht überschrieben werden, der Rest klingt einfach gut. Auch wenn sie ab und zu ein Problem aufnehmen könnten, bieten sie keinen garantierten Schutz und passieren genauso gut doppelte Dateinamen, um vorhandene Mails zu überschreiben. Schritt 2 ist sinnlos, da zwischen den Schritten 2 und 3 eine Rennbedingung besteht. Wenn dies der Fall ist, ist etwas kaputt und der STAT () -Prüfer hilft nicht, da ein anderer Vorgang möglicherweise gleichzeitig dasselbe tut, und Sie schreiben am Ende in TMP/, wodurch die Post beschädigt wird. In Schritt 4 würde der Link () auch fehlschlagen, wenn eine identische Datei bereits im MailDir wäre, oder? Falsch. Die Datei wurde möglicherweise bereits in CUR/ Verzeichnis verschoben, und da sie bis dahin eine beliebige Anzahl von Flags enthalten kann, können Sie nicht mehr mit einem einfachen Status () nachgehen, wenn sie vorhanden ist oder nicht. Also ist alles, was wichtig ist, wenn Sie keine E -Mails in Ihrem Maildir überschrieben haben, ist der Schritt 1: Erstellen Sie immer Dateinamen, die garantiert einzigartig sind. Vergessen Sie die 2 Sekunden -Warten und so, über die die Mannseite der Qmail -Mannschaft spricht
  8. ^ "Wayback -Maschine Snapshots von cr.yp.to/proto/maildir.html". Internetarchiv. 2018. Abgerufen 2018-11-23.
  9. ^ "umbenennen". Die offene Gruppe. 2013. Abgerufen 23. Juli 2016. Diese Spezifikation erfordert, dass die Wirkung der Funktion atomar ist.
  10. ^ Sam Varshavchik (25. Juli 2016). "Management von Maildir -Strukturen". Kurierverbraucher (Mailingliste). Abgerufen 26. Juli 2016.
  11. ^ Sirainen, Timo (2006-12-05). "Diff für 'MailboxFormat/MailDir' '". Abgerufen 2018-11-23.
  12. ^ MUTT MailDir -Unterstützung: Problemumgehung für Dateisysteme, die Colons keine akzeptieren
  13. ^ "AERC - die weltweit beste E -Mail -Kunden -Homepage". aerc-mail.org.
  14. ^ "NotMuch Mail System Homepage". NotMuchmail.org. Abgerufen 2019-06-22.
  15. ^ "Maildir in Thunderbird". Mozilla.org. Abgerufen 2020-12-06.

Siehe auch

Externe Links