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 angebenen 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 heisst 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.