2016-02-18 10 views
8

Bir exchange sunucusuna nasıl bağlanabilirim ve paylaşılan bir posta kutusundan (kendi "[email protected]" değil) gelen postaları okuyabilirim. İşte C# EWS Yönetilen API: Paylaşılan posta kutularına nasıl erişilir, ancak kendi gelen kutuma değil

bugüne kadar benim kodudur:

//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); 


       }  
       } 

ben bu çalıştırdığınızda, bunu sırasında "SMTP adresi kendisiyle ilişkilendirilmiş hiçbir posta kutusu yok" diyor atılmış bir istisna olsun:

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

Neyi özlüyorum? Neredeyse orada olduğumu hissediyorum ve bu EWS Managed API 2.0 belgelerine göre çalışmalı, ancak ben

cevap

12

Erişmek istediğiniz Posta Kutusu'nu belirtmek için FolderId aşırı yüklenmesini kullanıyor olmalısınız. Paylaşılan Posta Kutusu [email protected] denirdi eğer Değişim iade Maksimum öğe miktarını kısıtlamak gibi mesela sonra

ItemView itemView = new ItemView(int.MaxValue);

Bu işe yaramaz kullanmayın Ayrıca

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

kullanmak daraltma nedeniyle. Her zaman findItems ve findfolders http://blogs.msdn.com/b/exchangedev/archive/2010/03/12/throttling-policies-and-the-ewsfindcountlimit.aspx

Alkış Glen

+0

Eğer bir parçası olan paylaşılan posta kutuları tümünü numaralandırmak için bir yol var mı bakın sonucunu Paget? – Alexandru

+0

Buraya aşağıdaki soruları yolladım: http://stackoverflow.com/questions/38881919/enumerating-shared-mailbox-names-you-are-able-to-access-using-ews-managed-api – Alexandru

+1

Bu Cevap iyi bilinen klasör isimleri için uygun değildir. – Myzifer