Skip to content

Instantly share code, notes, and snippets.

@rolfn
Last active January 19, 2019 21:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save rolfn/7f3497ee13cdc636a3d758d6a86879ac to your computer and use it in GitHub Desktop.
Save rolfn/7f3497ee13cdc636a3d758d6a86879ac to your computer and use it in GitHub Desktop.
Synchronisation zweier IMAP-Server mit »imapsync«

Synchronisation zweier IMAP-Server mit »imapsync«

Das Programm »imapsync« ist geeignet, zwei IMAP-Server derart zu synchronisieren, dass sich alle oder nur manche E-Mails des Quell-Servers auch auf dem Ziel-Server befinden. Dies kann nützlich sein, wenn man vorhat, künftig einen neuen E-Mail-Server für den eigenen E-Mail-Verkehr zu nutzen und man will dabei nicht auf die alten E-Mails verzichten. Auch kann der Ziel-Server einfach nur dazu dazu dienen, eine Sicherheitskopie aller E-Mails zu speichern.

Im Folgenden wird beschrieben, wie man unter Verwendung des Linux-Dienstes »systemd« zeitlich gesteuert E-Mails von einem IMAP-Server zu einem anderen kopiert.

Festlegen des Zeitablaufs

Die Datei $HOME/.config/systemd/user/mail-sync.timer

[Unit]
Description=IMAP mail server sync (Timer)
Documentation=http://imapsync.lamiral.info/

[Timer]
OnCalendar=20:00
Persistent=true 

[Install]
WantedBy=default.target

legt fest, dass täglich um 20 Uhr ein Ablauf gestartet wird, der in einer Datei mail-sync.service definiert ist. Sollte der betreffende Nutzer zu diesem Zeitpunkt nicht eingeloggt sein, wird beim nächsten Einloggen die auszuführende Aktion sofort begonnen.

Festlegen des Synchronisierablaufs

Die Datei $HOME/.config/systemd/user/mail-sync.service enthält die nötigen Angaben:

[Unit]
Description=IMAP mail server sync
Documentation=http://imapsync.lamiral.info/

[Service]
Type=simple
ExecStart=/usr/bin/imapsync \
  --ssl1 --port1 993 --host1 QUELL_IMAP_SERVER \
  --user1 QUELL_NUTZER_NAME --passfile1 %h/.config/mail-sync/pw1.txt \
  --ssl2 --port2 993 --host2 ZIEL_IMAP_SERVER \
  --user2 ZIEL_NUTZER_NAME --passfile2 %h/.config/mail-sync/pw2.txt \
  --exclude 'Gel&APY-scht' --exclude 'Spamverdacht' --exclude 'Entw&APw-rfe' \
  --nolog --no-modulesversion --nofoldersizesatend --nofoldersizes \
  --debugssl 0 --automap --useuid --tmpdir '/var/tmp' 

[Install]
WantedBy=default.target

Zur Erklärung: Es werden ohne eine Log-Datei zu schreiben sämtliche E-Mails vom »QUELL_IMAP_SERVER« zum »ZIEL_IMAP_SERVER« transferiert. Beide Server verwenden zur Verschlüsselung beim Einloggen eine SSL-Verbindung und den dafür standardmäßigen Port. Vom Synchronisieren ausgenommen sind E-Mails, die sich auf dem Quell-Server in den Ordnern »Gelöscht«, »Spamverdacht« und »Entwürfe« befinden. Die Angabe --automap führt dazu, dass das Programm selbst versucht, einander entsprechende Spezialordner zu ermitteln (beispielsweise, dass »Spamverdacht« auf dem Quell-Server »Junk« auf dem Ziel-Server entspricht). Die zu den E-Mail-Accounts gehörenden Passwörter werden aus eigenen Dateien ausgelesen (Verzeichnis $HOME/.config/mail-sync), insbesondere, weil String-Definitionen in Systemd-Dateien recht problematisch sein können. Viele Hinweise zu den möglichen Parametern findet man auf der Imapsync-Seite.

Es empfiehlt sich, vor dem Erstellen der Datei mail-sync.service in einem Script den Programmaufruf zu testen, um festzustellen, ob der Ablauf auch wirklich dem gewünschten entspricht. Das Script könnte z.B. folgendermaßen aussehen:

#! /bin/bash
imapsync --logdir '.' --logfile 'imapsync.log' --no-modulesversion \
  --ssl1 --port1 993 \
  --host1 QUELL_IMAP_SERVER --user1 QUELL_NUTZER_NAME --password1 QUELL_PASSWORT \
  --ssl2 --port2 993 \
  --host2 ZIEL_IMAP_SERVER --user2 ZIEL_NUTZER_NAME --password2 ZIEL_PASSWORT \
  --automap --useuid --tmpdir /var/tmp/ --justfolders --dry

Schrittweise sollte man dieses Script unverändert, ohne --dry und dann ohne --justfolders laufen lassen und jeweils die Angaben in der Log-Datei überprüfen.

Der erste reguläre Synchronisierlauf kann je nach Anzahl der E-Mails und der Güte der Netzwerkverbindung sehr lange dauern.

Aktivieren und Starten des Synchronisierablaufs

systemctl --user enable mail-sync.timer 
systemctl --user start  mail-sync.timer

Test

systemctl --user status mail-sync.timer
journalctl -f --user-unit mail-sync.service 
journalctl --since today --user-unit mail-sync.service
systemctl --user list-timers 

Rolf (2017/03)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment