2017-09-29 1 views
0

Wie greife ich mit C# auf einen Outlook-Konto-Posteingang zu? Ich habe versucht, das Outlook-Objektmodell und IMAP zu verwenden, aber es zeigt nur das Outlook-Konto, das auf meinem Computer angemeldet ist. Ich versuche, mich mit Benutzername und Passwort an einem anderen Konto anzumelden, es meldet sich jedoch weiterhin bei meinem lokalen Computerkonto an. Ich las, dass sich abzumelden und Outlook schließen sollte dieses Problem beheben, aber es änderte sich nicht die ErgebnisseWie greife ich mit C# auf einen Outlook-Konto-Posteingang zu?

Hier den Code

using System; 
    using System.Reflection; 

    using Outlook = Microsoft.Office.Interop.Outlook; 

    namespace ConsoleApplication1 
    { 
     public class Class1 
     { 
      public static int Main(string[] args) 
      { 
       try 
       { 

        Outlook.Application oApp = new Outlook.Application(); 

        // Get the MAPI namespace. 
        Outlook.NameSpace oNS = oApp.GetNamespace("MAPI");    
        oNS.Logon("email address placeholder", "password placeholder", false, true); 

        //Get the Inbox folder. 
        Outlook.MAPIFolder oInbox = oNS.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox); 
        String user = oNS.CurrentUser.EntryID; 

        //Get the Items collection in the Inbox folder. 
        Outlook.Items oItems = oInbox.Items; 

        Console.WriteLine(oItems.Count);    
        Outlook.MailItem oMsg = (Outlook.MailItem)oItems.GetFirst(); 

        Console.WriteLine(oMsg.Subject); 
        Console.WriteLine(oMsg.SenderName); 
        Console.WriteLine(oMsg.ReceivedTime); 
        Console.WriteLine(oMsg.Body); 

        int AttachCnt = oMsg.Attachments.Count; 
        Console.WriteLine("Attachments: " + AttachCnt.ToString()); 

        if (AttachCnt > 0) 
        { 
        for (int i = 1; i <= AttachCnt; i++) 
        Console.WriteLine(i.ToString() + "-" + oMsg.Attachments[i].DisplayName); 
        } 

      for (int i = 0; i < oItems.Count; i++) 
      { 
       if (oItems.GetNext() is Outlook.MailItem) 
       { 
        oMsg = (Outlook.MailItem)oItems.GetNext(); 
        Console.WriteLine(oMsg.Subject); 
        Console.WriteLine(oMsg.SenderName); 
        Console.WriteLine(oMsg.ReceivedTime); 
        Console.WriteLine(oMsg.Body); 
        AttachCnt = oMsg.Attachments.Count; 
        if (AttachCnt > 0) 
        { 
         for (int j = 1; j <= AttachCnt; j++) 
          Console.WriteLine(j.ToString() + "-" + oMsg.Attachments[j].DisplayName); 
        } 

        Console.WriteLine("Attachments: " + AttachCnt.ToString()); 
        Console.WriteLine("CURRENT EMAIL # IS: " + i); 
       } 
       else 
       { 
        oItems.GetNext(); 
        Console.WriteLine("NOT AN EMAIL"); 
        Console.WriteLine("CURRENT EMAIL # IS: " + i); 
       } 


      } 

      oNS.Logoff(); 

      oMsg = null; 
      oItems = null; 
      oInbox = null; 
      oNS = null; 
      oApp = null; 
     } 

     catch (Exception e) 
     { 
      Console.WriteLine("{0} Exception caught: ", e); 


     } 

     return 0; 

    } 
} 

}

+1

Zeigen Sie eine minimale Version des von Ihnen versuchten Codes und das Ergebnis dieses Codes an. – ROAR

+0

Wurde dieser Account zu Outlook hinzugefügt? –

+0

Ja Ich habe versucht, das andere Konto zu Outlook hinzuzufügen, aber es ging immer noch an meine Haupt-E-Mail-Adresse. Ich verwende die .Logon-Funktion und ich bin mir nicht ganz sicher, ob ich das richtige Format für die Parameter für den Benutzernamen habe. Ist es die E-Mail-Adresse selbst oder etwas anderes? Wie genau interagiert der Code mit der Outlook-App, um festzustellen, wer der Benutzer ist? Müsste ich am Ende von Outlook etwas tun, um den Zugang zum Posteingang zu ermöglichen? – SoggyBread

Antwort

1

ist Sie können versuchen, diesen Code verwenden:

public List<Outlook.MailItem> GetMails() 
{ 
    Microsoft,Office.Interop.Outlook.NameSpace nameSpace = OutLookName.Application.GetNameSpace("MAPI"); 
    nameSpace.Logon("","",System.Reflection.Missing.Value,System.Reflection.Missing.Value); 
    Microsoft.Office.Interop.Outlook.MAPIFolder inboxFolder = nameSpace.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox); 
    List<Outlook.MailItem> eMails = new List<Outlook.MailItem>(); 

    foreach(Microsoft.Office.Interop.Outlook.MailItem mailItem in inboxFolder.Items) 
    { 
    if(mailItem.UnRead) 
     eMails.Add(mailItem); 
    } 
return eMails; 
} 
+0

Ich habe Zugriff auf zwei verschiedene E-Mail-Konten mit den gleichen Anmeldeinformationen. Ich kann auf eins zugreifen, aber wie bekomme ich Zugriff auf die zweite Mailbox? – user2347528

+0

Der folgende Code funktionierte für mich. Outlook.MAPIFolder theInbox = oNS.Folders ["Postfach - Name hier"]. Ordner ["Posteingang"]; – user2347528

Verwandte Themen