2017-09-18 2 views
0

J'essaie d'obtenir Outlook Email en utilisant Microsoft.Office.Interop.Outlook, mais dans les cas où le dossier a beaucoup de courriels (par exemple 1904 Emails) Je reçois seulement 571 emails.Outlook Interop application ne reçoit pas tous les emails C#

voici mon code:

 Application oApp = new Application(); 
     _NameSpace oNS = (_NameSpace)oApp.GetNamespace("MAPI"); 
     MAPIFolder inbox = oNS.GetDefaultFolder(OlDefaultFolders.olFolderInbox); 
     var emails = inbox.Items; 
     int emailsCount = emails.Count; 

quand j'ouvre des perspectives que je vois le numéro 1904 à côté du dossier Boîte de réception, mais quand je défiler vers le bas, je vois la ligne « il y a plus d'éléments dans ce dossier sur le sever "

dose quelqu'un sait comment puis-je télécharger tous mes e-mails en utilisant Outlook Interop?

Répondre

0

ceci est mon code d'une application de travail:

Beaucoup d'entre elles semble cassant une noix avec un marteau cependant, cette hasnt m'a manqué depuis plusieurs années.

MAPIFolder f; 

    int retries = 0; 
    while (!connected && retries < 2) 
    { 
     doUpdateStatus("Connecting"); 
     try 
     { 
      app = new Application(); 
      NameSpace ns = app.GetNamespace("MAPI"); 
      f = ns.GetDefaultFolder(OlDefaultFolders.olFolderInbox); 
      doUpdateStatus("Connected to outlook"); 
      doUpdateStatus("Walking Outlook Folders .. Please wait"); 
      try 
      { 
       doUpdateStatus(""); 
       if (DoSync) 
       { 
        try 
        { 

         doUpdateStatus("Syncing"); 
         SyncObject _syncObj = null; 
         _syncObj = ns.SyncObjects.AppFolders; 
         _syncObj.SyncEnd += _syncObj_SyncEnd; 
         ns.SendAndReceive(false); 
         syncing = true; 
         _syncObj.Start(); 
         while (syncing) 
         { 
          Thread.Sleep(10); 
         } 
         connected = true; 
        } 
        catch 
        { 
         doUpdateStatus("Sync failed"); 
        } 
        finally 
        { 
         syncing = false; 
        } 
       } 
       else 
       { 
        doUpdateStatus("Outlook sync disabled"); 
        connected = true; 
       } 

      } 

      catch 
      { 
       doUpdateStatus("Unable to connect to Outlook and Load folders"); 
       app.Quit(); 
       retries++; 
       Thread.Sleep(5000); 
      } 

     } 
     catch 
     { 
      doUpdateStatus("Unable to connect to Outlook"); 
      if (app!=null) app.Quit(); 
      retries++; 
      Thread.Sleep(5000); 
     } 
    } 
    private static void _syncObj_SyncEnd() 
    { 
     syncing = false; 
    } 
0

Vous pouvez forcer Outlook pour télécharger tous les éléments (assurez-vous que le curseur dans les propriétés du compte Exchange est réglé sur « All » plutôt que quelque chose comme « 12 mois ») ou vous pouvez rouvrir le dossier dans la ligne Mode - dans MAPI étendu (C++ ou Delphi), vous pouvez le faire en utilisant le drapeau MAPI_NO_CACHE lorsque vous appelez IMAPISession :: OpenEntry ou IMsgStore :: OpenEntry Si MAPI étendu n'est pas une option, vous pouvez utiliser Redemption:

MAPI_NO_CACHE = &H200 
MAPI_BEST_ACCESS = &H10 
set OutlookFolder = Application.ActiveExplorer.CurrentFolder 
set Session = CreateObject("Redemption.RDOSession") 
Session.MAPIOBJECT = Application.Session.MAPIOBJECT 
set OnlineFolder = Session.GetFolderFromID(OutlookFolder.EntryID, OutlookFolder.StoreID, MAPI_NO_CACHE + MAPI_BEST_ACCESS) 
MsgBox OnlineFolder.Items.Count 
.