2017-09-29 4 views
0

Comment puis-je accéder à une boîte de réception de compte Outlook en utilisant C#? J'ai essayé d'utiliser le modèle d'objet Outlook et IMAP, mais il affiche uniquement le compte Outlook connecté à ma machine. J'essaie de me connecter à un compte différent avec son nom d'utilisateur et son mot de passe, mais il se connecte toujours à mon compte machine local. Je lis que les perspectives de vous déconnecter et de fermer devraient résoudre ce problème, mais il n'a pas changé les résultatsComment puis-je accéder à une boîte de réception de compte Outlook en utilisant C#?

Voici le 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

Affiche une version minimale du code que vous avez essayé et le résultat de ce code. – ROAR

+0

Ce compte a-t-il été ajouté à Outlook? –

+0

Oui J'ai essayé d'ajouter le compte différent à Outlook mais il est allé encore à mon adresse électronique principale. J'utilise la fonction .logon et je ne suis pas complètement sûr si j'ai le bon format pour les paramètres pour le nom d'utilisateur. Est-ce l'adresse e-mail elle-même ou autre chose? De même, comment exactement le code interagit avec l'application Outlook pour déterminer qui est l'utilisateur? Aurais-je besoin de faire quoi que ce soit à la fin d'Outlook pour permettre l'accès à la boîte de réception? – SoggyBread

Répondre

1

Vous pouvez essayer d'utiliser ce code:

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

J'ai accès à deux comptes de messagerie différents avec les mêmes informations d'identification. Je suis en mesure d'accéder à un mais comment puis-je avoir accès à la deuxième boîte aux lettres? – user2347528

+0

Le code suivant a fonctionné pour moi. Outlook.MAPIFolder theInbox = oNS.Folders ["Boîte aux lettres - Nom ici"]. Dossiers ["Boîte de réception"]; – user2347528