2010-06-14 66 views
7

我正在編寫一個簡單的控制檯應用程序,用於監視特定的Exchange郵箱,當收到滿足特定條件的郵件時,該應用程序將下載一個XML文件附件,並且歸檔電子郵件。Exchange Web服務 - 處理郵件和訪問附件

我已經連接到EWS正常,並且已經能夠通過任何電子郵件進行循環,但是在創建可用於訪問附件的EmailMessage對象時我掙扎不已。

在下面的示例代碼中,EmailMessage message = EmailMessage.Bind(...)行執行時沒有錯誤,但沒有返回有效的消息,因此當我訪問和屬性或方法時,出現錯誤:'未將對象引用設置爲對象的實例」。

我是新的C#更不用說EWS所以我掙扎知道從哪裏開始...

代碼段:

public static void FindItems() 
    { 
     try 
     { 
      ItemView view = new ItemView(10); 
      view.OrderBy.Add(ItemSchema.DateTimeReceived, SortDirection.Ascending); 
      view.PropertySet = new PropertySet(
       BasePropertySet.IdOnly, 
       ItemSchema.Subject, 
       ItemSchema.DateTimeReceived); 

      findResults = service.FindItems(
       WellKnownFolderName.Inbox, 
       new SearchFilter.SearchFilterCollection(
        LogicalOperator.Or, 
        new SearchFilter.ContainsSubstring(ItemSchema.Subject, "Sales Enquiry")), 
       view); 

      log2.LogInfo("Total number of items found: " + findResults.TotalCount.ToString()); 

      foreach (Item item in findResults) 
      { 
       log2.LogInfo(item.Id); 

       EmailMessage message = EmailMessage.Bind(service, item.Id, new PropertySet(BasePropertySet.IdOnly, ItemSchema.Attachments)); 

       Console.WriteLine(message.Subject.ToString()); 

       if (message.HasAttachments && message.Attachments[0] is FileAttachment) 
       { 
        FileAttachment fileAttachment = message.Attachments[0] as FileAttachment; 
        fileAttachment.Load("C:\\temp\\" + fileAttachment.Name); 
        fileAttachment.Load(); 
        Console.WriteLine("FileName: " + fileAttachment.FileName); 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      log2.LogError(ex.InnerException); 
     } 
    } 

我訪問附件代碼是直接從MSDN所以我希望這是有關於...任何想法?

+1

我不認爲你能夠打印主題行,因爲你的屬性集不包括主題。 你從Exchange返回的代碼是什麼? emailmessage對象是否有效? 以下可能會有所幫助:http://social.technet.microsoft.com/Forums/en/exchangesvrdevelopment/thread/1d7d0be3-1e48-43c4-b2df-f6fa5c7bf254 您不需要遍歷要綁定的項目 - 嘗試LoadPropertiesForItems並查看是否有效 – Chris 2010-06-20 18:25:54

回答

12

恐怕我重新探討這個問題,並設法治癒它。不幸的是,我當時太緊迫,想回到這裏並記錄解決方案。已通過的時間,和我的東西我改變記憶已經漸漸淡去,但據我記得那是一個行變化:

EmailMessage message = EmailMessage.Bind(service, item.Id, new PropertySet(BasePropertySet.FirstClassProperties, EmailMessageSchema.Attachments)); 

這裏的關鍵區別是,我們已經指定BasePropertySet.FirstClassProperties作爲第一個參數PropertySet,而不是我們原來的BasePropertySet.IdOnly

我原來的代碼已經從網上的一個例子中解脫出來,這正是我想要實現的,所以這個例子不是很正確,或者我錯誤地轉錄了它或者誤解了問題的某些方面。

0
foreach(EmailMessage message in findResults) 
{ 
    message.Load(); 

    Console.WriteLine(message.Subject.ToString()); 

    if (message.HasAttachments && message.Attachments[0] is FileAttachment) 
    { 
     FileAttachment fileAttachment = message.Attachments[0] as FileAttachment; 
     fileAttachment.Load("C:\\temp\\" + fileAttachment.Name); 
     fileAttachment.Load(); 
     Console.WriteLine("FileName: " + fileAttachment.FileName); 
    } 
} 
相關問題