2014-09-25 76 views
3

我想編寫代碼以從Exchange 2010獲取郵件正文。我在C#程序中使用EWS。如何在C#中使用Exchange 2010檢索郵件正文#

我想:

   FindItemsResults<Item> fiitems = service.FindItems(folder.Id, "from:*", iv); 

      foreach (Item item in fiitems) 
      { 
       if (item is EmailMessage) 
       { 
        Console.WriteLine("subject"); 
        Console.WriteLine((item as EmailMessage).Subject); 

        Console.WriteLine("body"); 
        Console.WriteLine((item as EmailMessage).Body); 
       } 
      } 

,但我得到的錯誤說「你必須加載或轉讓該物業之前,你可以閱讀它的價值」

然後我想:

   Console.WriteLine("Subject:\t" + item.Subject); 
       Console.WriteLine("Title:\t" + item.TextBody); 
       Console.WriteLine("Received At:\t\t" + item.DateTimeReceived.ToString("dd MMMM yyyy")); 
       Console.WriteLine(); 

我收到錯誤說'屬性TextBody僅適用於Exchange Exchange2013或更高版本「 我正在使用Exchange2010。

謝謝你的任何建議。

回答

4

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

您需要做的是使用GetItem操作(這是Managed中的Load()方法API)來得到這個最有效的方式做,這是使用LoadPropertiesForItems方法,它會做一個批次的GetItem,所以你需要修改你的代碼像

 PropertySet Props = new PropertySet(BasePropertySet.IdOnly); 
     Props.Add(ItemSchema.Body); 
     Props.Add(ItemSchema.Subject); 
     FindItemsResults<Item> fiitems = null; 
     do 
     { 
      fiitems = service.FindItems(Folder.Id, "from:*", iv); 
      if (fiitems.Items.Count > 0) 
      { 
       service.LoadPropertiesForItems(fiitems.Items, Props); 
       foreach (Item item in fiitems) 
       { 
        if (item is EmailMessage) 
        { 
         Console.WriteLine("subject"); 
         Console.WriteLine((item as EmailMessage).Subject); 

         Console.WriteLine("body"); 
         Console.WriteLine((item as EmailMessage).Body); 
        } 
       } 
      } 
      iv.Offset += fiitems.Items.Count; 
     } while (fiitems.MoreAvailable); 

乾杯 格倫

相關問題