Erster Lösungsansatz = IMAPCopyDieses Tool obliegt der
GNU general public licenseund man kann es hier runterladen:Pro- CommandLine Tool
- gut dokumentiert und verständlich
- gut zu konfigurieren
- Debugmodus für Quelle und Ziel
- das Erzeugen eines Log-Files ist möglich
- Software kann frei kopiert und genutzt werden
Kontra- Tool kopiert immer wieder und verifiziert nicht
...und hier ist die Quelle und Beschreibung zu diesem ToolCommandLine Options
ImapCopy [-h] [-i] [-O SrcFolder] [-S SrcFolder] [-1] [-0] [-s] [-u]
-O SrcFolder : Copy only SrcFolder, -O can be specified more than once
-M SrcFolder : Skip match SrcFolder, -M can be specified more than once
-S SrcFolder : Skip SrcFolder, -S can be specified more than once
-i : Show info about servers and exit without copying
-1 : Copy only the first message of each folder
-0 : Copy folders only, dont copy any messages
-e : Create emtpy folders also
-t : Test login for all users in config file
-s : Subscribe all folders on destination server
-u : Subscribe all folders on Source, needed by some servers to
select a folder (only if select failes)
-X : Copy all Messages to INBOX, dont create Folders on Destination
-l : Write results to logfile imapcopy.log
HOW TO USE IT
First edit the configuration file (ImapCopy.cfg) and adjust the source and destinationserver. Add the source and destination users and passwords. The following sample copys the users "foo" and "bar" from server source.imap.com port 143 to server dest.imap.com port 145. Passwords for foo are "foosrcpw" and "foodestpw", for bar "barsrcpw" and "bardstpw". The folders "Trash", "Sent" and "Sent Objects" will not be copied.
SourceServer source.imap.com
SourcePort 143
DestServer dest.imap.com
DestPort 145
#CreateEmptyFolders
skipfolder INBOX.Trash
skipfolder INBOX.Sent
skipfolder "INBOX.Sent Objects"
# SourceUser SourcePassword DestinationUser DestinationPassword
Copy "foo" "foosrcpw" "foo" "foodestpw"
Copy "bar" "barsrcpw" "bar" "bardestpw"
Now verify that all users and passwords are correct:
imapcopy -t
You will get:
P:\LIB\TOOLS\ImapCopy>imapcopy -t
Login on sourceserver as foo OK
Login on destinationserver as foo OK
Getting folderlist on sourceserver OK, found 16 folder
Login on sourceserver as bar OK
Login on destinationserver as bar OK
Getting folderlist on sourceserver OK, found 122 folder
2 User processed, 0 Messages copied, 0 Error(s)
0 Folder(s) created, 0 Folder create errors, 0 Folder not copied
You can also show some information about the used servers:
imapcopy -i
ErgebnisseLotus Domino >> Tobit - Anmeldung am IMAP = ok
- Ordner und Files werden vom Domino gelesen und kopiert = ok
Tobit >> Lotus Domino - Anmeldung am IMAP = ok
- aber dann...
- im DebugModus sieht man dann was los ist
- bei select "INBOX" bekommt der Client (OulookExpress und IMAPCopy)wohl irgendwelchen Müll vor die Füsse geworfen und bricht die Aktivitäten für diesen Ordner ab
- man kann das zwar mit der Option -u umgehen aber damit verlagert man das Problem nur auf das Auslesen der Mails
- kein kopieren auf Grund fehlerhaft interpretierter Quelle möglich
- eine Probe beim Zugriff auf Tobit via Outlook Express war möglich, brachte jedoch in der obersten Instanz (INBOX) ebenso einen Fehler
- auf Grund dieses Fehlers kann IMAPCopy vermutlich die Dateien (Mails) dann nicht ansprechen/kopieren. Alle Unterordner wurden via Outlook Express jedoch angezeigt. Diese Tugend kann man aber wohl auch in aller Ruhe der hohen Ignoranzschwelle der Microsoft Produkte zurechnen
Bitte nicht als rummeckern verstehen, immerhin ein tolles Tool nur wenn man von Tobit lesen will dann hat man nach Stand der Dinge hier und heute Pech.
Na schaun wir mal was sich noch alles bewegt.
Ich habe den Schöpfer des Tools angeschrieben. Vielleicht hat er ja noch Zeit und Lust da beratend tätig zu werden.
Gruß
Stefan
NACHTRAGEs empfielt sich immer wieder manuell das nachzuvollziehen was irgendwelche Programme im Hintergrund eines Interfaces so treiben.
Wir haben also von der CommandLine ein
"telnet servername 143"losgelassen.
- . login username passwort
- . select "INBOX"
- und da kam schon die erste Fehlermeldung
Die Wahrheit findet man doch eben oft zu Fuß, eben weil man dann besser versteht was abgeht und auch die Details erkennt.
Nach einem Gespräch mit den Tobit Admin klärte sich dann auch die Herkunft der oben im Bild erwähnten Order "1E" und "1F" auf. Tobit erinnert sich da an seine Herkunft und die kommt wohl aus dem Novellbereich und da arbeitete man mit hexadezimalen Zahlengruppen als Verzeichnisname die dann hinterher einen Alias verpasst bekamen. So macht Tobit das wohl immer noch.
Desweiteren war der INBOX Ordner buggy da lag noch irgendwelcher Müll drin an dem der Client nicht vorbei kam.
Der Vollständigkeit halber hier noch eine Befehlszeilenreferenz von IMAP.
Wenn man nicht weiss was der IMAP Server kann, dann hilft das absetzen des IMAP-Befehls ". capability". So bekommt man die IMAP Version und eine kurze Befehlszeilenreferenz angezeigt. Die IMAP Version ist davon aber die wichtige. Information.
IMAP Befehlszeilenreferenz
APPEND
Fügt das Literalargument als eine neue Nachricht an das Ende des angegebenen Postfachs an. Dieses Argument muss das Format einer RFC-822-Nachricht haben.
AUTHENTICATE
Gibt ein Authentifizierungsverfahren für den Server an (z. B. AUTHENTICATE KERBEROS_V5).
CAPABILITY
Wird zum Anfordern einer Liste der vom Server unterstützten Funktionen verwendet.
CHECK
Wird zum Anfordern eines Prüfpunkts des derzeitig ausgewählten Postfachs verwendet. Ein Prüfpunkt bezieht sich auf implementierungsabhängige Details zum Postfach (z. B. Auflösen des Speicherstatus des Servers für das Postfach mit dem Status auf seinem Datenträger), die nicht bei jedem Befehl ausgeführt werden.
CLOSE
Entfernt dauerhaft alle Nachrichten aus dem ausgewählten Postfach, für die das Kennzeichen \Deleted festgelegt wurde, und wechselt vom ausgewählten Zustand in den authentifizierten Zustand zurück.
COPY
Wird zum Kopieren der ausgewählten Nachricht(en) an das Ende des Zielpostfachs verwendet. Die Kennzeichnungen und internen Daten der Nachricht(en) werden bei der Kopie beibehalten.
CREATE
Wird zum Erstellen eines Postfachs mit dem angegebenen Namen verwendet. Es wird nur OK als Antwort gesendet, wenn ein neues Postfach mit diesem Namen erstellt wird.
DELETE
Entfernt das Postfach mit dem angegebenen Namen dauerhaft. Es wird nur OK als Antwort mit Tags zurückgegeben, wenn das Postfach gelöscht wird.
EXAMINE
Ist mit SELECT identisch und gibt dieselbe Ausgabe zurück. Das ausgewählte Postfach wird allerdings als schreibgeschützt gekennzeichnet. Es sind keine dauerhaften Änderungen am Zustand des Postfachs, einschließlich des Zustands auf Benutzerebene, zulässig.
EXPUNGE
Entfernt alle Nachrichten aus dem ausgewählten Postfach, für die das Kennzeichen \Deleted festgelegt wurde.
FETCH
Ruft die einer Nachricht im Postfach zugeordneten Daten ab.
LIST
Gibt eine Untermenge der dem Client zur Verfügung stehenden Namen zurück.
LOGIN
Meldet den Client am Server an und führt die unverschlüsselte Authentifizierung für den Benutzer durch.
LOGOUT
Informiert den Server darüber, dass der Client die Verbindung trennen möchte.
LSUB
Gibt eine Untermenge der Namen zurück, die der Benutzer als Aktiv oder Abonniert gekennzeichnet hat.
NOOP
Dieser Befehl wird als „keine Operation“ interpretiert. Obwohl dieser Befehl keine Aktion ausführt, antwortet der Server bei erfolgreichem Ausführen des Befehls mit einer positiven Antwort (OK+). Sie können mit diesem Befehl testen, ob der Server in Betrieb ist und Clientanforderungen empfängt.
RENAME
Ändert den Namen des Postfachs. Es wird nur OK als Antwort mit Tags zurückgegeben, wenn das Postfach umbenannt wird.
SEARCH
Durchsucht das Postfach auf Nachrichten, die den angegebenen Suchkriterien entsprechen. Die Suchkriterien setzen sich aus einem oder mehreren Suchschlüsseln zusammen.
SELECT
Wählt ein Postfach aus, sodass auf Nachrichten in dem Postfach zugegriffen werden kann.
STATUS
Fragt den Status des angegebenen Postfachs ab. Dabei werden weder Änderungen am ausgewählten Postfach vorgenommen, noch hat dies Auswirkungen auf den Status der Nachrichten in dem Postfach.
STORE
Ändert die einer Nachricht im Postfach zugeordneten Daten.
SUBSCRIBE
Fügt den angegebenen Postfachnamen zur Liste der als Aktiv oder Abonniert gekennzeichneten Postfächer des Server hinzu, die mit dem LSUB-Befehl abgefragt werden können. Dieser Befehl gibt nur OK als Antwort mit Tags zurück, wenn die Abonnierung erfolgreich durchgeführt wurde.
UID
Dieser Befehl tritt in zwei Formen auf. In der ersten Form übernimmt er als Argumente die Befehle COPY, FETCH oder STORE mit den zugeordneten Argumenten dieser Befehle. In der zweiten Form übernimmt der UID-Befehl einen SEARCH-Befehl mit den zugehörigen Argumenten.
UNSUBSCRIBE
Entfernt den angegebenen Postfachnamen aus der Liste der als Aktiv oder Abonniert gekennzeichneten Postfächer des Servers, die mit dem LSUB-Befehl abgefragt werden können. Dieser Befehl gibt nur OK als Antwort mit Tags zurück, wenn die Aufhebung des Abonnements erfolgreich durchgeführt wurde.
Hier wird es dann noch etwas detailierter betrachtet ResuméTheorie und Praxis, gehen da wieder eigene Wege.
Wenn man diesen IMAP Vorgang einmal manuell ausführt begreift man das so ein Vorgang doch recht Zeitintensiv sein kann. Der Vorgang ist vielleicht mit dem zu vergleichen als wenn jemand ein Buch vorliest. Was wiederum bei Mails mit Anhängen dann einfach seine Zeit braucht.
Alles in Allem eine gute Sache um Inhalte von Maildatenbanken eines Accounts auf einen neuen Server zu importieren.
Für mehr taugt nach meiner Ansicht diese IMAP-Serverreplizierung nicht.
Gruß
Stefan
Nachtrag 2009-07-18Armin Diehl, der Schöpfer von IMAPCopy, war so nett sich dem Problem anzunehmen und hat eine neue Version von IMAPCopy fertiggestellt die das bestehende Problem fixt. Ich habe es getestet und es funktioniert !!!
> Gesendet: 17.07.2009 22:53 ZE2
> Betreff: Re: IMAPCopy - ich habe da ein kleines Problem
>
>
>
> Hi Stefan,
>
> habe mich ewig nicht mehr mit dem Tool beschäftigt. Wenn ich mir Deine
> Logs so ansehe, sieht das Datum welches Tobit da zurückliefert etwas
> merkwürdig aus, sollte das anstatt UT eventuell UTC sein. Gültig währe
> z.B. soetwas (auf meiner Linux Box):
>
> S:A000B APPEND INBOX (\Answered \Seen) "29-Sep-2002 11:30:42 +0200"
> {1684138}\r\n
>
> keine Ahnung ob anstatt +XXXX auch UTC erlaubt ist (habe auch damals als
> ich imapcopy geschrieben habe keine gültige Liste gefunden)
>
> Versuch es doch einmal manuell über Telnet indem Du das UC in UTC
> änderst. Wenn das Funktioniert kann ich (oder Du) das leicht in imapcopy
> anpassen.
> Möglich ist z.B. folgendes:
> In imapcopymain.pas steht schon folgendes:
> IF MailTime = '' THEN
> MailTime := Src.RFC822MessageDate (P); // for Lotus notes,
> sometimes notes returns invalid dates
>
> das extrahiert das Datum aus dem Mailbody anstatt das Datum zu verwenden
> welches bei fetch geliefert wurde. So würde das auch verwendet werden
> wenn das Datum auf UC endet:
>
> IF (MailTime = '') or (copy(MailTime,Length(MailTime)-1,2)='UC') THEN
>
> Besser aber ein Schalter in der cfg.
>
> Das Inbox-Problem und die komischen Foldernamen kann warscheinlich nur
> Tobit enträtseln.
> Datum: 2009-07-18 16:34
> Betreff: Re: AW: Re: IMAPCopy - ich habe da ein kleines Problem
>
> Hallo Stefan,
>
> ich habe mal eine neue Option in die cfg eingebaut um die Timezone
> ändern zu können. Währe schön wenn Du mal testen könntest ob das
> Problem
> damit behoben ist.
>
>
> > Wenn Du nichts dagegen hast würde ich Deine Antwort gern im Forum
> > veröffentlichen, vielleicht hilft es ja auch noch anderen dabei die
> > Erkenntnis zu gewinnen.
> >
> klar, kein Thema
Datum: 18.07.2009 21:07
Betreff: Re: Antwort: Re: AW: Re: IMAPCopy - ich habe da ein kleines Problem
Hi Stefan,
> vielen Dank ! Das funktioniert super !
> Klasse das wir das nun nutzen können... :-)
gut, dann hat Tobit da einen Fehler. Den imapserver den ich hier
einsetzte ignoriert übrigens ungültige Zeitzonen.
> Die ImapCopy.cfg kam zwar in einen Format was das lesen etwas schwer
> machte, aber mit dem passenden Editor war das kein Problem.
Ok, ich compiliere unter Linux (auch die Windows Executable), das war
dann warscheinlich nur LF als Zeilentrennung und nicht CR LF, ich schaue
mir mal das Buildscript an.
Wenn die Version in der endgültigen Form vorliegt wird sie auf der Homepage von Armin bzw. hier entsprechend zum Download angeboten.
Gruß
Stefan
Nachtrag 2009-07-21Auf Grund der Tatsache das IMAPCopy
- beim kopieren bestehende Einträge nicht überschreibt sondern ein Dublikat anlegt
- der Kopiervorgang recht zeitintensiv ist
- verschiedene Einfüsse den Kopiervorgang blockieren oder unterbrechen können
empfiehlt es sich statt direkt in die Zielmailbox zu schreiben, einen Unterordner zu benutzen. Somit kann man gegebenenfals besser differenzieren ob man nach einem Abbruch noch mal komplett von vorn anfängt oder aber nur noch bestimmte Ordner kopieren lässt. Dieses kann man ja recht einfach in der Konfigurationsdatei von IMAPCopy definieren.
In diesem Sinne ist die Aktivierung eines LOG´s per CommanLine (IMAPCopy -l) da ratsam. Dabei nicht vergessen zwischen jedem Versuch das LOG-File zu löschen, sonst wird es unübersichtlich.
Gruß
Stefan