2016-02-18 21 views
8

Come posso connettermi a un server di Exchange e leggere la posta da una casella di posta condivisa (una che non è la mia "[email protected]").C# EWS Managed API: Come accedere alle caselle postali condivise ma non alla mia casella di posta personale

Ecco il mio codice finora:

//Create a service 
     ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1); 
     //Autodiscover end point 
     service.AutodiscoverUrl("[email protected]"); 


     FindFoldersResults folderSearchResults = service.FindFolders(WellKnownFolderName.Inbox, new FolderView(int.MaxValue)); 

     Microsoft.Exchange.WebServices.Data.Folder exchangeMailbox = folderSearchResults.Folders.ToList().Find(
      f => f.DisplayName.Equals("NameOfSharedMailboxIwant", StringComparison.CurrentCultureIgnoreCase)); 

     //Set the number of items we can deal with at anyone time. 
     ItemView itemView = new ItemView(int.MaxValue); 

     foreach (Microsoft.Exchange.WebServices.Data.Folder folderFromSearchResults in folderSearchResults.Folders) 
     { 
      if (folderFromSearchResults.DisplayName.Equals("NameOfSharedMailboxIWant", StringComparison.OrdinalIgnoreCase)) 
      { 
       Microsoft.Exchange.WebServices.Data.Folder boundFolder = 
         Microsoft.Exchange.WebServices.Data.Folder.Bind(service, folderFromSearchResults.Id); 

       SearchFilter unreadSearchFilter = 
        new SearchFilter.SearchFilterCollection(
         LogicalOperator.And, new SearchFilter.IsEqualTo(
          EmailMessageSchema.IsRead, false)); 

       //Find the unread messages in the email folder. 
       FindItemsResults<Item> unreadMessages = boundFolder.FindItems(unreadSearchFilter, itemView); 

       foreach (EmailMessage message in unreadMessages) 
       { 
        message.Load(); 

        Console.WriteLine(message.Subject); 


       }  
       } 

Quando eseguo questo, ottengo un eccezione generata che dice che che "L'indirizzo SMTP non ha alcuna casella di posta ad esso associati" durante:

Microsoft.Exchange.WebServices.Data.Folder exchangeMailbox = folderSearchResults.Folders.ToList().Find(
      f => f.DisplayName.Equals("BA", StringComparison.CurrentCultureIgnoreCase)); 

Cosa mi manca? Mi sento come se fossi quasi lì e che questo dovrebbe funzionare secondo la documentazione di EWS Managed API 2.0, ma I

risposta

12

Dovresti semplicemente usare il sovraccarico FolderId per specificare la Mailbox a cui vuoi accedere. ad esempio, se la vostra cassetta postale condivisa è stato chiamato [email protected] quindi utilizzare

FolderId SharedMailbox = new FolderId(WellKnownFolderName.Inbox,"[email protected]"); 
ItemView itemView = new ItemView(1000); 
service.FindItems(SharedMailbox,itemView); 

Inoltre, non utilizzare

ItemView itemView = new ItemView(int.MaxValue);

questo non funzionerà come Exchange limitare la quantità massima di oggetti restituiti a causa della strozzatura. Paget sempre il risultato per findItems e findfolders vedere http://blogs.msdn.com/b/exchangedev/archive/2010/03/12/throttling-policies-and-the-ewsfindcountlimit.aspx

Acclamazioni Glen

+0

C'è un modo per enumerare tutte le cassette postali condivise siete una parte di? – Alexandru

+0

Ho postato una domanda di follow-up qui: http://stackoverflow.com/questions/38881919/enumerating-shared-mailbox-names-you-are-able-to-access-using-ews-managed-api – Alexandru

+1

Questo la risposta non è adatta per nessuno dei nomi di cartelle noti. – Myzifer