mailsync bietet sich im Wesentlichen für drei Aufgaben an:
Synchronisation lokal gespeicherter E-Mails mit E-Mails, die auf einem Server gespeichert sind.
Migration von Mailboxen in ein anderes Format bzw. auf einen anderen Server.
Integritätscheck einer Mailbox bzw. der Suche nach Duplikaten.
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.
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.