Imapsync ist ein Kommandozeilen Werkzeug 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)
[code lang=”bash”]
imapsync –host1 imap.main-server.de –user1 Username1 –passfile1 /etc/secret1 –host2 imap.dein-server.de –user2 Username2 –passfile2 /etc/secret2
[/code]
Um automatisch mehrer Accounts zu synchronisieren habe ich nachfolgendes Shellskript geschrieben.
[code lang=”bash”]
#!/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
[/code]
Das Shellscript erwartet eine Datei /tmp/data in der Form:
[code lang=”bash”]
username2@example.com;passwort_geheim
username2@example.com;passwort_geheim
username2@example.com;passwort_geheim
[/code]
Mit anderen Parametern werden die E-Mails umgezogen von einem zum anderen ImapServer (und auf dem Quellserver gelöscht) – siehe Beispiel unten:
[code lang=”bash”]
#!/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
[/code]
Weiterführende Links: