PHPGangsta - Der praktische PHP Blog

PHP Blog von PHPGangsta


eMail-Postfächer synchronisieren mit imapsync

with 5 comments

Einer der wenigen Artikel, die sich nicht um PHP drehen, aber trotzdem sehr interessant sind ūüėČ

So häufig braucht es der Normalanwender nicht, aber wenn man mal seinen Email-Provider wechselt oder eine Kopie aller seiner Mails auf einem anderen Server haben möchte, gibt es nichts einfacheres als das imapsync-Script von Gilles Lamiral.

imapsync ist ein Perl-Script, das unter Linux, Windows und Mac l√§uft und die Emails zweier IMAP-Konten abgleichen kann. Dabei kopiert es nicht nur die Emails selbst, sondern auch deren Flags und das Interne Datum der Mails. Jede Nachricht wird auch nur einmal kopiert, sodass m√∂glichst wenig Datentransfer stattfindet. Es ist also sowohl f√ľr Backupzwecke als auch Migrationszwecke von gro√üem Nutzen, denn es unterst√ľtzt eine Vielzahl von verschiedenen IMAP-Servern.

Wenn ich hier alle Optionen aufz√§hlen w√ľrde, die das Script unterst√ľtzt, w√ľrde der Artikel sehr lang werden. Das lassen wir also sch√∂n bleiben, nur ein paar Stichworte seien verraten: Es unterst√ľtzt SSL, Ordner k√∂nnen √ľbersprungen werden, man kann Quellordner auf andere Zielordner mappen, Mails k√∂nnen nach der Synchronisierung gel√∂scht werden (dann ist es eher ein Verschieben von Mails statt einer Synchronisierung), Mails die gr√∂√üer als ein Limit sind k√∂nnen √ľbersprungen werden, nur Mails der letzten X Tage k√∂nnen synchronisiert werden usw usw.

Genug Informationen, um es mal auszuprobieren? Dann los:

sudo apt-get install imapsync

Schon ist es installiert und wir k√∂nnen anfangen zu synchronisieren. Erstmal machen wir einen Trockendurchlauf (–dry), es wird also nur simuliert:

imapsync --dry --host1 10.0.0.2 --user1 "mkliewe@mail.de" --password1 "Passwort1" --host2 10.0.0.3 --user2 "backup@mail.de" --password2 "Passwort2"

Die Ausgabe sieht dann beispielsweise so aus:

$RCSfile: imapsync,v $ $Revision: 1.286 $ $Date: 2009/07/24 15:53:04 $
Here is a [linux] system (Linux xxxxx01 2.6.31-14-server #48-Ubuntu SMP Fri Oct 16 15:07:34 UTC 2009 x86_64)
with perl 5.10.0
Mail::IMAPClient  3.21
IO::Socket        1.30_01
IO::Socket::SSL
Digest::MD5       2.36_01
Digest::HMAC_MD5
Term::ReadKey
Date::Manip
 and the module Mail::IMAPClient version used here is 3.21
Command line used:
/usr/bin/imapsync --dry --host1 10.0.0.2 --user1 mkliewe@mail.de --password1 MASKED --host2 10.0.0.3 --user2 backup@mail.de --password2 MASKED
Turned ON syncinternaldates, will set the internal dates (arrival dates) on host2 same as host1.
TimeZone:[europe/berlin]
Will try to use CRAM-MD5 authentication on host1
Will try to use CRAM-MD5 authentication on host2
From imap server [10.0.0.2] port [143] user [mkliewe@mail.de]
To   imap server [10.0.0.3] port [143] user [backup@mail.de]
Banner: * OK mail.de Dovecot ready.
Host 10.0.0.2 says it has CAPABILITY for AUTHENTICATE CRAM-MD5
Success login on [10.0.0.2] with user [mkliewe@mail.de] auth [CRAM-MD5]
Banner: * OK mail.de Dovecot ready.
Host 10.0.0.3 says it has CAPABILITY for AUTHENTICATE CRAM-MD5
Success login on [10.0.0.3] with user [backup@mail.de] auth [CRAM-MD5]
host1: state Authenticated
host2: state Authenticated
From separator and prefix: [.][]
To   separator and prefix: [.][]
++++ Calculating sizes ++++
From Folder [INBOX]                             Size:     37258 Messages:     3
From Folder [Test2]                             Size:         0 Messages:     0
From Folder [Trash]                             Size:         0 Messages:     0
Total size: 37258
Total messages: 3
Time: 0 s
++++ Calculating sizes ++++
To   Folder [INBOX]                             Size:         0 Messages:     0
To   Folder [Test2]                            does not exist yet
To   Folder [Trash]                            does not exist yet
Total size: 0
Total messages: 0
Time: 0 s
++++ Listing folders ++++
From folders list: [INBOX] [Test2] [Trash]
To   folders list: [INBOX]
++++ Looping on each folder ++++
From Folder [INBOX]
To   Folder [INBOX]
++++ From [INBOX] Parse 1 ++++
++++ To   [INBOX] Parse 1 ++++
++++ Verifying [INBOX] -> [INBOX] ++++
+ NO msg #1 [jM2q9dB8TAvtUZDi0mNMyQ:30262] in INBOX
+ Copying msg #1:30262 to folder INBOX
flags from: [$notjunk]["21-Dec-2009 15:15:25 +0100"]
+ NO msg #2 [0RLbKdGjywBv4mLEANRUtg:5553] in INBOX
+ Copying msg #2:5553 to folder INBOX
flags from: [$notjunk]["21-Dec-2009 17:19:02 +0100"]
+ NO msg #3 [ctDrRzmFgf4W2lUbu/KlBQ:1443] in INBOX
+ Copying msg #3:1443 to folder INBOX
flags from: [$notjunk]["19-Dec-2009 19:34:30 +0100"]
Time: 1 s
From Folder [Test2]
To   Folder [Test2]
To   Folder Test2 does not exist
Creating folder [Test2]
From Folder [Trash]
To   Folder [Trash]
To   Folder Trash does not exist
Creating folder [Trash]
++++ End looping on each folder ++++
++++ Statistics ++++
Time                   : 1 sec
Messages transferred   : 0 (could be 3 without dry mode)
Messages skipped       : 0
Total bytes transferred: 0
Total bytes skipped    : 0
Total bytes error      : 0
Detected 0 errors

In diesem Fall gibt es also 3 Ordner auf dem Quellserver. Die Ordner „Trash“ und „Test2“ gibt es auf dem Zielserver noch nicht, sie w√ľrden also angelegt. Es existieren auch 3 Emails in der INBOX, die synchronisiert werden.

Wenn man den selben Befehl nochmal ohne –dry ausf√ľhrt, dann wird wirklich synchroniert von host1 nach host2.

Um dann die Synchronisation st√ľndlich zu wiederholen eignet sich ein Cronjob:

sudo crontab -u root -e

mit dem Inhalt

0 * * * 1-5 /usr/local/bin/myimapsync.sh

wobei in der myimapsync.sh nat√ľrlich der Befehl stehen sollte, beispielsweise:

#!/bin/bash

imapsync --dry --host1 imap.domain.de --user1 "user@domain.de" --password1 "Passwort1" --host2 10.0.0.3 --user2 "backup@domain.de" --password2 "Passwort2" >> /var/log/myimapsync.log

Hier f√ľr Administratoren noch ein kleines hilfreichen Script, welches mehrere Konten synchronisiert:

#!/bin/bash

inputfile="/etc/imapsyncbatch.conf"
host1="imap.domain.de"
host2="10.0.0.3"
logfile="/var/log/imapsyncbatch.log"

if [ ! -f $inputfile ]
then
{
	echo "The input file does not exist! Exiting..." >> $logfile
	exit;
}
fi

date=`date +%X_-_%x`
echo "$date IMAPSync started..." >> $logfile

tr "," " " <$inputfile | while read u1 p1 u2 p2
do
	date=`date +%X_-_%x`
	echo "$date Start Syncing User $u1 to $u2" >> $logfile
	imapsync $1 --buffersize 8192000 --nosyncacls --syncinternaldates \
		--host1 $host1 --user1 "$u1" --password1 "$p1" --ssl1 --port1 993 \
		--host2 $host2 --user2 "$u2" --password2 "$p2" --ssl2 --port2 993 \
		--noauthmd5
	date=`date +%X_-_%x`
	echo "$date Finished $u1 to $u2" >> $logfile
done

date=`date +%X_-_%x`
echo "$date IMAPSync Finished..." >> $logfile
echo "$date ------------------------------------" >> $logfile

wobei in der /etc/imapsyncbatch.conf die Zugangsdaten stehen:

user1@domain.de,Passwort1,user2@domain.de,Passwort2
bernd@domain.de,PasswortBernd,backup@domain.de,PasswortBernd

Falls mehrere Personen Zugriff auf diesen Rechner haben, sollte diese Datei gut gesch√ľtzt werden (beispielsweise mit „sudo chmod 700 /etc/imapsyncbatch.conf“). Da das Script selbst keinen Root-Zugriff auf den Rechner braucht, kann man es auch mit einem normalen Benutzeraccount starten, dann mu√ü allerdings der Lesezugriff auf die /etc/imapsyncbatch.conf und der Schreibzugriff auf /var/log/imapsyncbatch.log gew√§hrleistet sein.

Written by Michael Kliewe

Dezember 21st, 2009 at 7:15 pm

5 Responses to 'eMail-Postfächer synchronisieren mit imapsync'

Subscribe to comments with RSS or TrackBack to 'eMail-Postfächer synchronisieren mit imapsync'.

  1. Toller Tip!!! Die nächste Gelegenheit zum Test kommt mit Sicherheit. Danke!

    Fladi

    21 Dez 09 at 21:32

  2. […] eMail-Postf√§cher synchronisieren mit imapsync | PHP Gangsta – Der … […]

  3. Das script ist schlecht, denn es verschluckt den imapsync output. Kene gute Idee, nicht nachmachen!

    Bughunter

    1 Aug 11 at 02:06

  4. Nicht mehr kostenlos und damit nicht mehr via apt-get install einfach zu haben ūüôĀ

    benni

    6 Jan 12 at 14:35

  5. @benni: Das stimmt nur halb soweit ich weiß, es gibt nach wie vor gratis Versionen wenn man sie findet, nur wenn man es von der Homepage lädt kostet es Geld.

    http://freecode.com/projects/imapsync/announcements/795-imapsync-is-ten-years-old
    http://www.linux-france.org/prj/imapsync_list/msg00726.html

    Auf meinem Ubuntu 10.10 scheint es noch zu existieren:
    $ sudo apt-get update
    $ apt-cache search imapsync
    imapcopy – IMAP backup, copy and migration tool
    imapsync – IMAP synchronization, copy and migration tool

    Michael Kliewe

    6 Jan 12 at 15:31

Leave a Reply

You can add images to your comment by clicking here.