47.7. Einführung in mailsync

mailsync bietet sich im Wesentlichen für drei Aufgaben an:

47.7.1. Konfiguration und Benutzung

mailsync unterscheidet zwischen der Mailbox an sich (einem so genannten Store) und der Verknüpfung zwischen zwei Mailboxen (einem so genannten Channel). Die Definitionen der Stores und Channels wird in der Datei ~/.mailsync abgelegt. Im Folgenden sollen einige Beispiele für Stores vorgestellt werden. Eine einfache Definition sieht zum Beispiel so aus:

store saved-messages {
   pat     Mail/saved-messages
   prefix  Mail/
}

Mail/ ist ein Unterverzeichnis im Home des Benutzers, welches Ordner mit E-Mails enthält, unter anderem den Ordner saved-messages. Ruft man nun mailsync mit dem Befehl mailsync -m saved-messages auf, wird ein Index aller Nachrichten in saved-messages aufgelistet. Eine weitere Definition kann wie folgt aussehen:

store localdir {
   pat     Mail/*
   prefix  Mail/
}

Hier bewirkt der Aufruf von mailsync -m localdir das Auflisten aller Nachrichten, die in den Ordnern unter Mail/ gespeichert sind. Der Aufruf mailsync localdir listet dagegen die Ordnernamen.

Die Spezifikation eines Stores auf einem IMAP-Server sieht zum Beispiel so aus:

store imapinbox {
   server  {mail.uni-hannover.de/user=gulliver}
   ref     {mail.uni-hannover.de}
   pat     INBOX
}

Im obigen Fall wird nur der Hauptordner auf dem IMAP-Server adressiert, ein Store für die Unterordner sieht dagegen wie folgt aus:

store imapdir {
   server  {mail.uni-hannover.de/user=gulliver}
   ref     {mail.uni-hannover.de}
   pat     INBOX.*
   prefix  INBOX.
}

Unterstützt der IMAP-Server verschlüsselte Verbindungen, sollte man die Server-Spezifikation wie folgt abändern:

server {mail.uni-hannover.de/ssl/user=gulliver}

bzw. (falls das Server-Zertifikat nicht bekannt ist) in

server {mail.uni-hannover.de/ssl/novalidate-cert/user=gulliver}

Nun sollen die Ordner unter Mail/ mit den Unterverzeichnissen auf dem IMAP-Server verbunden werden:

channel Ordner localdir imapdir {
   msinfo .mailsync.info
}

Dabei wird sich mailsync in der mit msinfo angegebenen Datei merken, welche Nachrichten schon synchronisiert wurden. Ein Aufruf von mailsync Ordner bewirkt nun Folgendes:

  • Auf beiden Seiten wird das Mailbox-Muster (pat) expandiert.

  • Von den dabei entstehenden Ordnernamen wird jeweils das Präfix (prefix) entfernt.

  • Die Ordner werden paarweise synchronisiert (bzw. angelegt, falls noch nicht vorhanden).

Ein Ordner INBOX.sent-mail auf dem IMAP-Server wird also mit dem lokalen Ordner Mail/sent-mail synchronisiert (obige Definitionen vorausgesetzt). Dabei wird die Synchronisation zwischen den einzelnen Ordnern folgendermaßen durchgeführt:

  • Existiert eine Nachricht schon auf beiden Seiten, passiert gar nichts.

  • Fehlt die Nachricht auf einer Seite und ist neu (d. h. nicht in der msinfo-Datei protokolliert) wird sie dorthin übertragen.

  • Existiert die Nachricht nur auf einer Seite und ist alt (d. h. bereits in der msinfo-Datei protokolliert), wird sie dort gelöscht (da sie hoffentlich auf der anderen Seite existiert hatte und dort gelöscht wurde).

Um im Voraus ein Bild davon zu erhalten, welche Nachrichten bei einer Synchronisation übertragen und welche gelöscht werden, ruft man mailsync mit einem Channel und einem Store gleichzeitig auf: mailsync Ordner localdir.

Dadurch erhält man eine Liste aller Nachrichten, die lokal neu sind, als auch eine Liste aller Nachrichten, die bei einer Synchronisation auf der IMAP-Seite gelöscht werden würden!

Spiegelbildlich erhält man mit mailsync Ordner imapdir eine Liste aller Nachrichten, die auf der IMAP-Seite neu sind, als auch eine Liste aller Nachrichten, die bei einer Synchronisation lokal gelöscht werden würden.

47.7.2. Mögliche Probleme

Im Fall eines Datenverlustes ist es das sicherste Vorgehen, die zugehörige Channel-Protokolldatei msinfo zu löschen. Dadurch gelten alle Nachrichten, die nur auf jeweils einer Seite existieren, als neu und werden beim nächsten Sync übertragen.

Es werden nur solche Nachrichten in die Synchronisation einbezogen, die eine Message-ID tragen. Nachrichten, in denen diese fehlt, werden schlichtweg ignoriert, das heißt weder übertragen noch gelöscht. Das Fehlen einer Message-ID kommt in der Regel durch fehlerhafte Programme im Prozess der Mailzustellung oder -erzeugung zustande.

Auf bestimmten IMAP-Servern wird der Hauptordner mittels INBOX, Unterordner mittels eines beliebigen Namen angesprochen (im Gegensatz zu INBOX und INBOX.name). Dadurch ist es bei solchen IMAP-Server nicht möglich, ein Muster ausschließlich für die Unterordner zu spezifizieren.

Die von mailsync benutzen Mailbox-Treiber (c-client), setzen nach erfolgreicher Übertragung der Nachrichten auf einen IMAP-Server ein spezielles Status-Flag, wodurch es manchen E-Mail-Programmen, wie zum Beispiel mutt, nicht möglich ist, die Nachrichten als neu zu erkennen. Das Setzen dieses spezielles Status-Flags lässt sich in mailsync mit der Option -n unterbinden.

47.7.3. Weiterführende Informationen

Das im Paket mailsync enthaltene README unter /usr/share/doc/packages/mailsync/ enthält weitere Informationen und Hinweise. Von besonderem Interesse ist in diesem Zusammenhang auch das RFC 2076 "Common Internet Message Headers".