2016-02-18 3 views
8

Как подключиться к серверу обмена и читать почту из общего почтового ящика (не моего собственного «[email protected]»).C# EWS Управляемый API: как получить доступ к общим почтовым ящикам, но не к моему собственному почтовому ящику

Вот мой код до сих пор:

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


       }  
       } 

Когда я запускаю это, я получаю исключение брошенную, который говорит, что это «Адрес SMTP не имеет почтовый ящик, связанный с ним» во время:

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

Что мне не хватает? Я чувствую, что я почти там, и что это должно работать в соответствии с документацией EWS Managed API 2.0, но I

ответ

12

Вы должны просто использовать перегрузку FolderId, чтобы указать почтовый ящик, к которому вы хотите получить доступ. например, если ваша общая папка называлась [email protected] затем использовать

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

Также не используйте

ItemView itemView = new ItemView(int.MaxValue);

Это не будет работать Биржа будет ограничивать максимальное количество элементов, возвращенных из-за дросселирования. Всегда Педжет результата для findItems и findfolders см http://blogs.msdn.com/b/exchangedev/archive/2010/03/12/throttling-policies-and-the-ewsfindcountlimit.aspx

Приветствие Глен

+0

Есть ли способ, чтобы перечислить все общие почтовые ящики вы являетесь часть? – Alexandru

+0

Я разместил здесь следующий вопрос: http://stackoverflow.com/questions/38881919/enumerating-shared-mailbox-names-you-are-able-to-access-using-ews-managed-api – Alexandru

+1

Это ответ не подходит ни для каких известных имен папок. – Myzifer

Смежные вопросы