Imapsync ist ein Kommandozeilenwerkzeug, mit dem man E-Mails von einem Imapserver auf einen anderen übertragen kann. Es läuft recht stabil und man kann z. B. mittels Cron damit auch Mailboxen zwischen verschiedenen Providern synchronisieren.
Installieren lässt sich imapsync z. B. unter Debian oder Ubuntu mittels
apt-get install imapsync
Das imapsync Kommando ist relativ einfach aufgebaut – es müssen die Hostnamen der beiden Imapserver die man synchronisieren will angegeben werden und die entsprechenden Usernamen und Passwörter (in dem Beispiel geht das über eine Passwortdatei, das Passwort kann auch über kommandozeile übergeben werden, erscheint dann aber bei den aktuellen Prozessen – wenn man z.B. ps -auxw |grep imapsync aufrufen würde sieht man das Passwort)
imapsync --host1 imap.main-server.de --user1 Username1 --passfile1 /etc/secret1 --host2 imap.dein-server.de --user2 Username2 --passfile2 /etc/secret2
Um automatisch mehrer Accounts zu synchronisieren habe ich nachfolgendes Shellskript geschrieben.
#!/bin/bash
CMD=/usr/bin/imapsync
DATA=/tmp/data
HOST1=mail1.example.com
HOST2=mail2.example.com
#EMAIL=`cat $DATA |cut -d ";" -f 1`
#PASSWD=`cat $DATA |cut -d ";" -f 2`
for i in `cat $DATA`
do
EMAIL=`echo $i |cut -d ";" -f 1`
PASSWD=`echo $i |cut -d ";" -f 2`
echo "Syncronisiere Daten für Email: $EMAIL, (Passwort: $PASSWD)"
echo "=============================================================="
$CMD --host1 $HOST1 --user1 $EMAIL --password1 $PASSWD --host2 $HOST2 --user2 $EMAIL --password2 $PASSWD
echo "=============================================================="
done
Das Shellscript erwartet eine Datei /tmp/data in der Form:
username2@example.com;passwort_geheim
username2@example.com;passwort_geheim
username2@example.com;passwort_geheim
Mit anderen Parametern werden die E-Mails umgezogen von einem zum anderen ImapServer (und auf dem Quellserver gelöscht) – siehe Beispiel unten:
#!/bin/bash
CMD=/usr/bin/imapsync
DATA=/tmp/data
HOST1=host1.example.com
HOST2=host2.example.com
#EMAIL=`cat $DATA |cut -d ";" -f 1`
#PASSWD=`cat $DATA |cut -d ";" -f 2`
for i in `cat $DATA`
do
EMAIL=`echo $i |cut -d ";" -f 1`
PASSWD=`echo $i |cut -d ";" -f 2`
echo "Syncronisiere Daten für Email: $EMAIL, (Passwort: $PASSWD)"
echo "=============================================================="
$CMD --delete --expunge1 --host1 $HOST1 --user1 $EMAIL --password1 $PASSWD --host2 $HOST2 --user2 $EMAIL --password2 $PASSWD
echo "=============================================================="
done
Weiterführende Links: