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
For Each item As DvApi32.MessageItem In archive.AllItems
Dim messageitem As DvApi32.MessageItem2 = archive.GetArchiveEntryByID(item._ID)
If (Not item Is Nothing AndAlso TypeOf (item) Is DvApi32.MailItem) Then
Dim mail As DvApi32.MailItem = item
Dim curmessageid As String = GetMessageId(mail, archive)
If (curmessageid = id) Then
result = item
Exit For
End If
End If
Next
Private Function GetMessageId(mail As DvApi32.MailItem, archive As DvApi32.Archive) As String
Dim result As String = GetMessageIdFromCache(mail)
Dim fields As DvApi32.Fields = mail.Fields
If (result.IsNullOrEmptyExtended()) Then
result = fields.GetText(FieldConsts.MessageID)
If (result.IsNullOrEmptyExtended()) Then
result = fields.GetText(FieldConsts.MsgID)
End If
If (Not result.IsNullOrEmptyExtended()) Then
AddToMessageIdCache(mail, result)
End If
End If
Return result
End Function
Alles anzeigen
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