2014-03-06 83 views
1

我正在使用Exchange Web服務託管API。我正在添加一個擴展屬性,以便在收件箱中郵寄郵件時,它們會根據某些條件進行處理。因此,並非所有的郵件都會得到這個擴展屬性。無法獲取電子郵件的內置屬性以及擴展屬性

接下來,我正在重新提取收件箱中的所有郵件,如果他們將此屬性附加到他們,我再處理它們。

下面是一個簡單的方法getAllMailsInInbox(),我曾寫信給重新讀取該郵件在收件箱:

class MyClass 
{ 
    private static Guid isProcessedPropertySetId; 
    private static ExtendedPropertyDefinition isProcessedPropertyDefinition = null; 

    static MyClass() 
    { 
     isProcessedPropertySetId = new Guid("{20F3C09F-7CAD-44c6-BDBF-8FCB324244}"); 
     isProcessedPropertyDefinition = new ExtendedPropertyDefinition(isProcessedPropertySetId, "IsItemProcessed", MapiPropertyType.String); 
    } 

    public List<EmailMessage> getAllMailsInInbox() 
    { 
     List<EmailMessage> emails = new List<EmailMessage>(); 
     ItemView itemView = new ItemView(100, 0); 
     FindItemsResults<Item> itemResults = null; 

     PropertySet psPropSet = new PropertySet(BasePropertySet.IdOnly); 
     itemView.PropertySet = psPropSet; 

     PropertySet itItemPropSet = new PropertySet(BasePropertySet.IdOnly,            
              ItemSchema.Attachments, 
              ItemSchema.Subject,            
              ItemSchema.Importance, 
              ItemSchema.DateTimeReceived, 
              ItemSchema.DateTimeSent, 
              ItemSchema.ItemClass, 
              ItemSchema.Size, 
              ItemSchema.Sensitivity, 
              EmailMessageSchema.From, 
              EmailMessageSchema.CcRecipients, 
              EmailMessageSchema.ToRecipients,  
              EmailMessageSchema.InternetMessageId,                
              ItemSchema.MimeContent, 
              isProcessedPropertyDefinition); //*** 

     itemResults = service.FindItems(WellKnownFolderName.Inbox, itemView); 
     service.LoadPropertiesForItems(itemResults.Items, itItemPropSet); 

     String subject = itItem.Subject; //Exception: "You must load or assign this property before you can read its value." 
     //.... 
    } 
} 

正如你所看到的,隨叫隨到service.LoadPropertiesForItems(),這不加載任何特性,從而導致You must load or assign this property before you can read its value.異常而訪問任何這些屬性。

如果我從itItemPropSet屬性集中刪除isProcessedPropertyDefinition,它會正確提取所有屬性。

所以我可以只知道如何獲取所有內置EmailMessage屬性以及擴展屬性?

回答

2

您的GUID在最後一個破折號之後的兩位數字太短。奇怪你沒有看到FormatException。不過,您應該更新代碼以檢查每個項目的GetItemResponse。這樣,如果一個項目發生某種錯誤,您的代碼可以知道它。這意味着你需要創建另一個集合才能返回。

更新你的代碼是:

ServiceResponseCollection<ServiceResponse> responses = service.LoadPropertiesForItems(itemResults.Items, itItemPropSet); 

foreach (ServiceResponse response in responses) 
{ 
     if (response.Result == ServiceResult.Error) 
     { 
      // Handle the error associated 
     } 

     else 
     { 
      String subject = (response as GetItemResponse).Item.Subject; 
     } 
} 
+0

對不起,我在編寫問題時只是操縱了GUID。別管它。 – Mahesha999

0

而不是做 service.LoadPropertiesForItems的(itemResults.Items,itItemPropSet);

嘗試做

itemResult.LoadPropertiesForItems(itItemPropSet);

Casue一旦你有了物品,你可以通過加載特定物品來加載物品的擴展屬性。