Email per VC++ API in ein anderes Archive verschieben

  • Hallo,

    ich habe eine kleine Anwendung in C++ geschrieben, die bestimmte Emails modifiziert. Das funktioniert soweit. Nun möchte ich diese Emails in ein anderes Archive verschieben. Aus der API-Doku werde nicht ganz schlau. Es gibt da "Move" aber irgendwie scheint das nicht das richtige zu sein!? Per Client-Script habe ich es hinbekommen, möchte es aber in der Anwendung einbauen.

    Hat Jemand eine Idee?


    es grüßt
    Micha

  • Hier ein wenig unvollständiger Code:

    C
    Archive* duplicateArchive;
    IMessageItem2* iMessageItem =  NULL;
    inArchive->GetArchiveEntryByID(vID, &iMessageItem);
    
    
    iMessageItem->Move(duplicateArchive, VARIANT_TRUE);

    Die Funktion zum verschieben der Nachricht ist in Zeile 5 - sie ist eine Funktion der IMessageItem2 Klasse, als Parameter gibt du den Pointer zum Archiv (Klasse Archive) in die deine Nachricht verschoben werden soll, der zweite Parameter sollte immer "VARIANT_TRUE" sein, damit verschoben wird.

  • Vielen Dank Basti!

    Das hat an für sich funktioniert. Aber nur ein mal.
    Ich habe dann noch die Transfer-Funktion entdeckt und bin mit dieser aber zum gleichen Ergebnis gekommen.
    Es ist so als ob alles korrekt ohne Fehler ausgeführt wird, aber die Mails in Wirklichkeit noch am gleichen Ort sind.

    Ich bin nun darauf gekommen, daß wenn die Bereinigung ausgeführt wurde und der Client (der auf der gleichen Maschine läuft) neu gestartet wurde es wieder für ein mal funktioniert.
    Ist der Client auf einer anderen Maschine gestartet reicht es aus die Bereinigung durchzuführen. Die Bereinigung läuft hier komischerweise länger.

    Muß man nach jedem Transfer-Vorgang die Bereinigung ausführen? Kann ich diese über eine C++ Funktion starten?

    Micha


    Hier der Teil der die Transfer-Funktion betrifft (mit noch etwas unbeholfenem Umgang mit UNICODE):

  • Also ich nutze die Move Funktion in einer meiner Anwendungen und die verschiebt mehrere Mails in verschiedene Archive und es funktioniert problemlos.
    Was heißt denn, "es funktioniert nur einmal"?

    Ob man eine Bereinigung per API ausführen kann, weiß ich nicht ohne jetzt in die Doku zu gucken.

  • Wenn das Programm ausgeführt wird, verschiebt es die Emails (eine oder mehrere) aus dem Personal-Archive in Drafts. Fülle ich das Personal-Archive wieder mit Emails und führe das Programm aus, so werden die Emails nicht mehr verschoben. Nach der Bereinigung geht es wieder.

    Mit dem Transfer-Beispiel aus der API-Doku 1:1 kopiert, der gleiche Effekt. Den übrigen Code habe ich auskommentiert.

    Nach weiteren durchgeführten Tests wird es noch kurioser. Ich gebe ja die Betreffzeile auf der Konsole aus. Bislang habe ich ein und die selbe Email mehfach in den Quellordner kopiert. Beim verwenden unterschiedlicher Emails ist mir bei der Ausgabe aufgefallen, daß die Betreffzeile vom letzten Programmdurchlauf angezeigt wird. Also von der Email die bereits verschoben wurde!?

    Als nächstes habe ich die Schleife entfernt und unter vID.lVal einen festen Wert angegeben. Es verhält sich dann so, daß es mit der einmal verwendeten Nr. nicht mehr funktioniert bzw. auf die bereits verschobene Email zugreift. Ich bin davon ausgegangen, daß die Nr. nach dem Verschieben angepaßt wird bzw. auf die Nummerierung immer bei 0 beginnt.

  • Naja, ich finde das nicht verwunderlich, denn die Funktion heißt ja schließlich "getArchiveEntryByID" und nicht "getArchiveEntryByIndex" - du musst dir vorher die ID holen und die der getArchiveEntryByID Funktion übergeben.


    C
    VARIANT vID;pSourceMessageItems2->get__ID(&vID);

    Hier noch ein Ausschnitt aus meinem Code:

  • Daaaaaanke! :thumbup:

    Nach der Anpassung funktioniert das Programm einwandfrei.

    Ein kleiner Schönheitsfehler ist mir aber noch aufgefallen. Nach dem Save() mit VT_STORED_OBJECT fehlen die eingebetteten Bilder/Logos - auch auf Dateiebene. Der Originaltext ist auch nicht mehr aufrufbar. "Normale" Anhänge bleiben erhalten.
    Ich habe einmal im TIC den Editor auf den Bearbeitungmodus eingestellt. Nach einer Änderung und Abspeicherung fehlt auch hier danach der Originaltext. Die eingebetteten Bilder sind jedoch noch vorhanden und werden in der Dateiliste bei der Beschreibung mit cid: gekennzeichnet.

    Muß man noch irgend etwas beachten oder sogar ein bug? Geändert wurde nur der Betreff.

    Ansonsten habe ich die Idee die Dateien auf Dateiebene zu sichern und danach wieder herzustellen/umzubenennen. Über den Explorer habe ich das erfolgreich getestet.

    es grüßt
    Micha


    btw: ich habe herausgefunden daß man über die API auch die Bereinigung steuern kann (purging)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!