Outlook Löschen von Emails in Outbox mit pywin32

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Aerosail
User
Beiträge: 1
Registriert: Dienstag 6. Mai 2014, 13:59

Hallo Allerseits.

Kurz zu mir:
Ich bin eigentlich Programmierer für Industriesteuerungen (SPS), arbeite also sehr Hardware-Nah, wenn man mal von SCL absieht, welches Pascal sehr ähnelt.

Ich habe mich hier angemeldet, da ich ein Problem mit Outlook habe.
Ich soll für unsere Entwickler Testcode schreiben, mit der sich einige Sachen unser Releases testen lassen, bevor diese ausgerollt werden.

Dabei befasse ich mich aktuell mit der MAPI-Schnittstelle. Um MAPI Extended verwenden zu können, habe ich mir auf Windows 7 Outlook 2013 installiert.
Über pywin32 habe ich dann den Zugang zum eMail-Profil programmiert.

Als dummy habe ich erstmal die SendEMAPIMail-Demo aus der Bibliothek genommen, die auch ausgezeichnet funktioniert. Später werden die eMails von dem Release (Cpp + Qt-Gui) ins Ausgangspostfach gelegt (auch über MAPI).
Ich habe nun ein Script geschrieben, was nachschaut, ob das Ablegen der Mail über MAPI funktioniert hat, um die eMail dann ungesendet zu löschen. Das Script würde dann später in Squish (das soll für die Qt-GUI-Tests benutzt werden) eingebunden werden.

Es funktioniert alles ganz gut, allerdings hat die Sache einen Haken. Outlook überschreibt die Properties PR_ACCESS und PR_ACCESS_LEVEL wenn eine eMail mit submit() ins Postfach gelegt wird.

Wenn ich die eMail danach löschen will, dann passiert nichts. Ich bekomme auch kein "Access denied!" beim Aufruf von DeleteMessages(...) zurück.
Beide Properties haben zu niedrige Zugangsberechtigungen. Über GetProps ausgelesen für PR_ACCESS == 2, für PR_ACCESS_LEVEL == 0.
Das setzen der Properties über SetProps([(PR_ACCESS,7),(PR_ACCESS_LEVEL,1)]) bzw. als Values MAPI_BEST_ACCESS oder MAPI_MODIFY wird dann aber mit "Access denied!" beantwortet.
Abhilfe schafft momentan nur Das Öffnen der Mail in Outlook oder das Anschauen der Properties der Message mit OutlookSpy. Sobald eins von beiden erfolgt, ändern sich die Properties PR_ACCESS auf 7 (DELETE, MODIFY, READ) und PR_ACCESS_LEVEL auf 1 (MODIFY). Wird das Script dann erneut ausgeführt löscht sich die entsprechende eMail auch sofort.

Ich habe mittlerweile alle Aufrufe, die so etwas wie MAPILogonEx, OpenMsgStore, OpenEntry mit den Flags MAPI_BEST_ACCESS und MAPI_MODIFY versehen, jedoch ohne Erfolg.
Wo kann der Fehler liegen? Ich vermute irgendwas auf Outlook-Seite.
Morgen werde ich das Script mal auf einer XP-VM mit einem älteren Outlook testen.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Aerosail hat geschrieben:Wo kann der Fehler liegen? Ich vermute irgendwas auf Outlook-Seite.
Das glaube ich auch. Wahrscheinlich findest Du in einem MAPI-Forum (falls es das gibt) schneller eine Antwort.
Antworten