MessageId per DVApi32-Ermitteln

  • hi,


    ich hänge leider schon seit Tagen an einem Problem und finde die Lösung nicht.
    Wenn ich ein "MailItem" mit "DVEmlFromMailItem" abspeichere hat die EML-Datei hinterher korrekterweise eine MessageId.


    Nun möchte ich nachträglich das MailItem anhand der MessageId wieder finden. Dazu lauf ich mit einer Schleife durch Archive.AllItems



    Die Methode GetMessageId liefert allerdings nie ein Ergebnis zurück, da weder fields.GetText(FieldConsts.MessageID) noch fields.GetText(FieldConsts.MsgID) einen Wert zurück gibt. Fields.Item("MessageId").Value und eine for-schleife bei der ich auch .Name= "MessageId" prüfe und mit beim Fund das Ergebnis zurück liefern lasse schlagen genauso fehl. Das Feld wird immer gefunden, ist aber immer leer.


    Das gleiche mit MessageItem2 anstelle von MailItem bringt auch das gleiche Ergebnis, nämlich keines :(


    Ich habe auch schon probiert, das MailItem mit DVEmlFromMailItem zu speichern, ernte da aber in 90% der fälle eine AccessViolationException, bei der ich auch nicht verstehe woher die kommt. Ich hatte hier schon einen anderen Thread gefunden mit der AccessViolation, allerdings war dort der Ursprung, dass es eine Console.exe war, ich laufe aber einem Forms-Prozess. Und grundsätzlich funktioniert mein Aufruf auch. Nur leider nur bei max. 10% Emails.


    Kann mir jmd. weiterhelfen wie ich an die MessageId per API komme?


    Vielen Dank


    Jürgen Hoffmann
    Softwareentwickler

  • Hallo Jürgen,


    ich weiß nicht was in MessagID überhaupt drin stehen sollte, aber ich nehme an, Du brauchst das Feld _ID. Das gibt es auch als Eigenschaft direkt beim MailItem.
    Diese ID ist allerdings nicht statisch, also aufpassen. Löscht ein User einen Eintrag aus dem Verzeichnis, wird der laufende Index bei der nächtlichen Datenbereinigung neu aufgebaut und die IDs neu geschrieben!


    Dass es einen entsprechenden Wert in der EML gibt vage ich zu bezweifeln - habe ich aber noch nie geprüft.
    Ich würde an Deiner Stelle den FileName speichern. Der ändert sich nicht solange der Eintrag im gleichen Verzeichnis bleibt - wird er verschoben änder er sich, aber dann stimmt ja auch der UNC Pfad nicht mehr.


    Speichere diesen Wert beim Erzeugen des EML, dann kannst Du später darauf zu greifen, und zwar direkt ohne eine Schleife laufen lassen zu müssen. Sollte sich also auch deutlich positiv auf die Performance auswirken, zumindest bei großen Archiven.


    Gruß Jens

    Es wäre schön, Deinen Vornamen zu kennen. Bitte beachte unsere Forenregeln und die Netiquette.

    ----------

    Bitte teilen/weitersagen: STARFACE Module Databasewww.sfm-db.com


    STARFACE Excellence PartnerSTARFACE Module CreatorTobit.Software Authorized Partner (Mailserver/Unified Messaging)work4all! Solution Partner (CRM/ERP)Securepoint Professional Partner (Firewall/UTM)


    1 Qubit - J.Suingwww.1qubit.deSoftware - Service - Coding

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!