C# Outlook Email finden. Frage zu Code

  • C#

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Petersilie.

    C# Outlook Email finden. Frage zu Code

    Hallo Leute,

    ich suche im Ordner "Gesendete Elemente" in Outlook per C# Add-In nach einem spezifischen Subject.

    Dazu habe ich zwei zwei kleine Versionen zum finden.

    Nummer 1. gibt IMMER null zurück
    Nummer 2. findet es zuverlässig falls vorhanden.

    Kann mir jemand sagen was ich so dramatisch falsch mache bei der Variante 1

    Deklarationen:

    C#-Quellcode

    1. // get mapi namespace
    2. Microsoft.Office.Interop.Outlook.NameSpace olNameSpace = _olApp.GetNamespace("MAPI");
    3. // get sent folder
    4. Microsoft.Office.Interop.Outlook.MAPIFolder outbox = olNameSpace.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderSentMail);
    5. // get sent items
    6. Microsoft.Office.Interop.Outlook.Items items = outbox.Items;


    Variante 1:

    C#-Quellcode

    1. // create MailItem list
    2. IEnumerable<Microsoft.Office.Interop.Outlook.MailItem> mail =
    3. items.OfType<Microsoft.Office.Interop.Outlook.MailItem>().Where(m => m.Subject == TrackingHeader).Select(m => m);


    Variante 2:

    C#-Quellcode

    1. Microsoft.Office.Interop.Outlook.MailItem foundParent = null;
    2. foreach (var item in items)
    3. {
    4. var mailitem = item as Microsoft.Office.Interop.Outlook.MailItem;
    5. if (mailitem != null && mailitem.Subject != null)
    6. {
    7. if (string.Compare(TrackingHeader, mailitem.Subject.Trim(), StringComparison.OrdinalIgnoreCase) == 0)
    8. {
    9. foundParent = mailitem;
    10. break;
    11. }
    12. }
    13. }



    Ein Bild vom Code ist auch noch dabei.
    Bilder
    • GetParent.jpg

      111,6 kB, 1.183×484, 29 mal angesehen

    Petersilie schrieb:

    Nummer 1. gibt IMMER null zurück
    kann nicht sein.
    IM Nicht-FindeFall gibt Variante1 eine leere Auflistung zurück.
    (also falls zu unter "zurückgeben" das verstehst, was ich mir zusammenreime, was du damit meinen könntest - weil eine return-Anweisung, die etwas "zurückgeben" würde, ist ja nirgends zu sehen.)
    @ErfinderDesRades

    Hi, vorher war die zweite variante nicht drinnen und mein return value war FirstOrDefault() meines IEnumerable.

    Habe den Fehler vor ein paar minuten entdeckt... und er tut weh.
    Problem: Layer 8
    Ich hatte beim testen der Auflistung noch die Items der Outbox also olFolderOutbox.Items übergeben.
    Falscher Ordner, der ist Leer, es müssen in meinem Fall die Items des olFolderSentMail sein.

    Beim implementieren der zweiten Variante hatte ich die Ordner Referenz schon geändert...