mailsync eignet sich vor allem für die folgenden drei Aufgaben:
Synchronisierung von lokal gespeicherten E-Mails mit E-Mails, die auf einem Server gespeichert sind
Migration von Mailboxen in ein anderes Format bzw. auf einen anderen Server
Integritätsprüfung einer Mailbox bzw. 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 sind in der ~/.mailsync
abgelegt. Die folgenden Abschnitte geben einige Beispiele für Stores.
Eine einfache Definition kann wie folgt aussehen:
store saved-messages { pat Mail/saved-messages prefix Mail/ }
Mail/
ist ein Unterverzeichnis im Home-Verzeichnis des Benutzers, das Ordner mit E-Mails enthält, unter anderem den Ordner saved-messages
. Wird nun mailsync mit dem Befehl mailsync -m saved-messages
gestartet, wird ein Index aller Nachrichten in saved-messages
aufgelistet. Für die folgende Definition:
store localdir { pat Mail/* prefix Mail/ }
listet der Befehl mailsync -m localdir
alle Nachrichten auf, die unter Mail/
gespeichert sind. Der Befehl mailsync localdir
listet dagegen die Ordnernamen auf. Die Spezifikation eines Store auf einem IMAP-Server sieht wie folgt aus:
store imapinbox { server {mail.edu.harvard.com/user=gulliver} ref {mail.edu.harvard.com} pat INBOX }
Das obige Beispiel adressiert nur den Hauptordner auf dem IMAP-Server. Ein Store für die Unterordner würde wie folgt aussehen:
store imapdir { server {mail.edu.harvard.com/user=gulliver} ref {mail.edu.harvard.com} pat INBOX.* prefix INBOX. }
Unterstützt der IMAP-Server verschlüsselte Verbindungen, sollte die Server-Spezifikation wie folgt geändert werden:
server {mail.edu.harvard.com/ssl/user=gulliver}
oder, falls das Server-Zertifikat nicht bekannt ist, wie folgt:
server {mail.edu.harvard.com/ssl/novalidate-cert/user=gulliver}
Das Präfix wird später erklärt.
Nun sollen die Ordner unter Mail/
mit den Unterverzeichnissen auf dem IMAP-Server verbunden werden:
channel folder localdir imapdir { msinfo .mailsync.info }
mailsync verfolgt mithilfe der Datei msinfo, welche Nachrichten bereits synchronisiert wurden.
Der Befehl mailsync folder
bewirkt Folgendes:
Auf beiden Seiten wird das Mailbox-Muster erweitert.
Von den resultierenden Ordnernamen wird jeweils das Präfix entfernt.
Die Ordner werden paarweise synchronisiert (bzw. angelegt, falls noch nicht vorhanden).
Der Ordner INBOX.sent-mail
auf dem IMAP-Server wird also mit dem lokalen Ordner Mail/sent-mail
synchronisiert (obige Definitionen vorausgesetzt). Die Synchronisierung zwischen den einzelnen Ordnern wird wie folgt durchgeführt:
Existiert eine Nachricht schon auf beiden Seiten, geschieht nichts.
Fehlt die Nachricht auf einer Seite und ist neu (d. h. nicht in der Datei msinfo protokolliert), wird sie dorthin übertragen.
Existiert die Nachricht nur auf einer Seite und ist alt (d. h. bereits in der Datei msinfo protokolliert), wird sie dort gelöscht (da sie offenbar auf der anderen Seite existiert hatte und dort gelöscht wurde).
Um im Voraus ein Bild davon zu erhalten, welche Nachrichten bei einer Synchronisierung übertragen und welche gelöscht werden, starten Sie mailsync mit einem Channel und einem Store gleichzeitig: mailsync folder localdir
. Dadurch erhalten Sie eine Liste aller Nachrichten, die auf dem lokalen Host neu sind, sowie eine Liste aller Nachrichten, die bei einer Synchronisierung auf der IMAP-Seite gelöscht werden würden. Ähnlich erhalten Sie mit mailsync folder imapdir
sowohl eine Liste aller Nachrichten, die auf der IMAP-Seite neu sind, als auch eine Liste aller Nachrichten, die bei einer Synchronisierung auf dem lokalen Host gelöscht werden würden.
Im Fall eines Datenverlusts 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 bei der nächsten Synchronisierung übertragen.
Nur Nachrichten mit einer Message-ID werden in die Synchronisierung einbezogen. Nachrichten ohne Message-ID werden einfach ignoriert, d. h. sie werden weder übertragen noch gelöscht. Das Fehlen einer Message-ID wird in der Regel durch fehlerhafte Programme beim Senden oder Schreiben einer Nachricht verursacht.
Auf bestimmten IMAP-Servern werden der Hauptordner mit INBOX
und Unterordner mit einem beliebigen Namen angesprochen (im Gegensatz zu INBOX und INBOX.name). Dadurch ist es bei solchen IMAP-Servern nicht möglich, ein Muster ausschließlich für die Unterordner anzugeben.
Die von mailsync benutzten Mailbox-Treiber (c-client) setzen nach der erfolgreichen Übertragung der Nachrichten an einen IMAP-Server ein spezielles Status-Flag. Daher können einige E-Mail-Programme, wie z. B. mutt, diese Nachrichten nicht als neu erkennen. Sie können das Setzen dieses speziellen Status-Flags mithilfe der Option -n
verhindern.