Outlook VBA DIY Attachmentfilter Probleme mit EntryID

  • Outlook

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Marcus Gräfe.

    Outlook VBA DIY Attachmentfilter Probleme mit EntryID

    Hallo,

    ich habe in Outlook 2016 einen einfachen Attachment-/ Link-filter programmiert, der meistens hervorragend funktioniert. Das Programm läuft auf einer immer geöffneten Outlookinstanz, in der 6 emailkonten von anderen Netzwerkbenutzern eingebunden sind. Kommt eine neue email herein, dann wird diese mit Application_NewMailEx abgefangen und die dabei vom System übergebene EntryID wird an ein MailItem Objekt übergeben, aus dem ich die Anhänge heraus lese und prüfe.

    Zu 80% funktioniert das super, jedoch hin und wieder bleibt das Programm hängen, mit der Fehlermeldung: "Typen unverträglich" Lzfehler 13. Im Code unten habe ich die Stelle markiert.

    Es ist nicht das Problem von strIDs(), das funktioniert und bringt einen String heraus, der exakt der EntryIDCollection entspricht.
    Das Problem ist, dass .GetItemFrom die von Outlook übergebene ID nicht versteht.

    Wenn ich den EntryID-String 'von Hand eintrage':
    set objEmail = objNS.GetItemFromID("00000000223216C4A06102448F55B3EFACC3EF9C0700795D8723A614C44A9DB33BFC7ED30CE400000DD88C4B0000795D8723A614C44A9DB33BFC7ED30CE4000017DA82BE0000")
    dann kommt der gleiche Fehler, also Typen unverträglich.

    Wenn ich den String 'von Hand eintrage' und die letzte Null entferne:
    set objEmail = objNS.GetItemFromID("00000000223216C4A06102448F55B3EFACC3EF9C0700795D8723A614C44A9DB33BFC7ED30CE400000DD88C4B0000795D8723A614C44A9DB33BFC7ED30CE4000017DA82BE000")
    dann kommt der Fehler "Das Element konnte nicht geöffnet werden".

    Wenn ich irgendeinen String 'von Hand eintrage' :
    set objEmail = objNS.GetItemFromID("123456789")
    dann kommt der Fehler "Das Element konnte nicht geöffnet werden".

    "Typen unverträglich" würde eigentlich bedeuten, .GetItemFromID erwartet einen String und bekommt etwas anderes. Da können wir aber ausschließen, denn ich habe den String ja von Hand eingegeben, die Konvertierung mit Gewalt und cstr bringt auch nichts.

    Also muss das Problem sein, dass die offizielle EntryID von Outlook nicht stimmt.

    Das verkürzte Programm:

    Visual Basic-Quellcode

    1. Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
    2. Dim objNS As Outlook.NameSpace, objEmail As Outlook.MailItem, strIDs() As String, intX As Integer, absender As String
    3. strIDs = Split(EntryIDCollection, ",")
    4. For intX = 0 To UBound(strIDs)
    5. Set objNS = Application.GetNamespace("MAPI")
    6. Set objEmail = objNS.GetItemFromID(strIDs(intX)) '<<<<<<< hier hängt das Programm manchmal mit "Typfehler"
    7. msgbox objEmail.SenderEmailAddress
    8. Next
    9. Set objEmail = Nothing
    10. End Sub



    Kann mir jemand helfen?

    Gruß Felix

    Basicprogrammierung seit 1983

    Code-Tags eingefügt. ~Thunderbolt

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Thunderbolt“ ()

    Haben die Mails, die den Fehler verursachen, irgendeine Besonderheit? Anhänge, als Junk definiert, durch eine Regel verschoben/bearbeitet usw.?

    Hilft es evtl., noch den 2. und optionalen Parameter _EntryIDStore_ anzugeben (siehe learn.microsoft.com/de-de/offi…k.namespace.getitemfromid)? Ich weiß allerdings nicht, wo man den herbekommen könnte. ;)
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Hallo Marcus,
    danke für den Input. Ich konnte bis jetzt die mails nicht dem Fehler zuordnen, da ich bei Fehlereintritt keine Zuordnung zur Mail habe (wegen fehlerhafter ID). Ich nehme die Anregung gerne auf und habe eine Überwachung eingefügt. D.h. wenn Fehler, dann Print Uhrzeit. Damit kann ich die fehlerhafte Mail finden.

    Visual Basic-Quellcode

    1. On Error Resume Next
    2. Err.Clear
    3. Set objNS = Application.GetNamespace("MAPI")
    4. Set objEmail = objNS.GetItemFromID(strIDs(intX))
    5. If Err.Number > 0 Or Len(Err.Description) > 1 Then
    6. Debug.Print Now(), Err.Number, Err.Description
    7. Exit Sub
    8. Else
    9. Debug.Print Now(), objEmail.SenderEmailAddress, objEmail.SenderName, objEmail.EntryID
    10. End If

    *VB-Tag eingefügt*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Hallo,

    Lösung: meine Maßnahme (siehe Post 29.8.2023) dank der Anregung von Marcus hat das Problem einigermaßen gelöst.

    Neu eingegangene Besprechungsanfrage: bringt Fehlermeldung 13 " Typen unverträglich"
    Wenn Outlook eine neue mail als JUNK definiert, dann bringt mein Code Fehler -2147221233 "Ein Clientvorgang ist fehlgeschlagen"
    Also laufen während der Aktivierung von Application_NewMailEx sekundäre Prozesse von Outlook, die z.B. mail als Junk definieren und ins Junk-Verzeichnis schieben. Damit ändert sich die mail-ID und kan in der aktuellen Instanz von Application_NewMailEx nicht mehr gefunden werden.
    Das konnte ich der Doku von Microsoft über Application_NewMailEx so nicht entnehmen.

    Egal wie, ich lasse in meinem Projekt die etwas schmutzige Programmierung mit On Error so wie sie ist, es erfüllt den Zweck. Dank an Marcus Gräfe.
    Evtl. dann doch die StoreID für den Ordner angeben (_EntryIDStore_)?

    Ich habe hier noch was dazu gefunden, ich poste es der Vollständigkeit halber (ist aber 19 Jahre alt): microsoft.public.office.develo…yz9Ic/storeid-and-entryid
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum