2014-09-12 78 views
2

我的目標是獲取給定文件夾中的所有電子郵件,但我不斷收到房產錯誤:EWS託管API獲取所有電子郵件項目出錯

The property Body can't be used in FindItem requests

請問你一些仁慈地指出我是什麼做錯了。以下是我使用.NET Framework 4.0的測試代碼:

private static void GetEmailMessageCollection(ExchangeService service) 
    { 
    ItemView view = new ItemView(100); 

    view.PropertySet = new PropertySet(PropertySet.FirstClassProperties); 
    view.PropertySet.Add(ItemSchema.HasAttachments); 
    view.PropertySet.Add(ItemSchema.Body); 
    view.PropertySet.Add(ItemSchema.DisplayTo); 
    view.PropertySet.Add(ItemSchema.IsDraft); 
    view.PropertySet.Add(ItemSchema.DateTimeCreated); 
    view.PropertySet.Add(ItemSchema.DateTimeReceived); 

    FindItemsResults<Item> findResults; 
    List<EmailMessage> emails = new List<EmailMessage>(); 

    string archiveFolderID = " AQEuAAADGF6AegrId0+ekrWv0TJZtgEAZ2jpm1niGUS/jwC23X6j/AAAAgP/AAAA"; 

    SearchFilter unreadSearchFilter = new SearchFilter.SearchFilterCollection(); 
    Folder boundFolder = Folder.Bind(service, archiveFolderID); 
    findResults = boundFolder.FindItems(unreadSearchFilter, view); 


    foreach (var item in findResults.Items) 
    { 
     emails.Add((EmailMessage)item); 
    } 

    } 

謝謝。

回答

6

當您在EWS中使用FindItems操作時,它只會返回一個Item的可用屬性子集。它不會返回的屬性之一是Body屬性(或任何流屬性大於512字節)請參閱http://msdn.microsoft.com/EN-US/library/office/dn600367(v=exchg.150).aspx

您需要做的就是使用GetItem操作來獲取此最有效的方法來執行此操作使用LoadPropertiesForItems方法,它會做一個批次的GetItem,所以你需要修改你的代碼像

 ItemView view = new ItemView(100); 
     view.PropertySet = new PropertySet(PropertySet.IdOnly); 
     PropertySet PropSet = new PropertySet(); 
     PropSet.Add(ItemSchema.HasAttachments); 
     PropSet.Add(ItemSchema.Body); 
     PropSet.Add(ItemSchema.DisplayTo); 
     PropSet.Add(ItemSchema.IsDraft); 
     PropSet.Add(ItemSchema.DateTimeCreated); 
     PropSet.Add(ItemSchema.DateTimeReceived); 

     FindItemsResults<Item> findResults; 
     List<EmailMessage> emails = new List<EmailMessage>(); 
     do 
     { 
      findResults = service.FindItems(WellKnownFolderName.Inbox, view); 
      if (findResults.Items.Count > 0) 
      { 
       service.LoadPropertiesForItems(findResults.Items, PropSet); 
       foreach (var item in findResults.Items) 
       { 
        Console.WriteLine(item.Body.Text); 
       } 
      } 
      view.Offset += findResults.Items.Count; 
     } while (findResults.MoreAvailable); 

乾杯 格倫

+0

,如果你需要使用身體作爲過濾器你會怎麼做? I.E.在調用FindItems之前,需要正文值。我在[MSDN]上問你這個問題(https://social.msdn.microsoft.com/Forums/office/en-US/bdbfa8fa-43c2-4078-b13b-9795b1c8af0d/exchange-web-service-2007-sp1 -the-property-body-cant-be-used-in-finditem-requests?forum = exchangevrdevelopment)包括我的代碼片段。如果你能看一看,我會很感激。 – MadDev 2017-01-05 09:16:58

相關問題