2013-07-08 66 views
2

任何幫助,鏈接或想法都非常感謝。謝謝!查詢特定交易所2013文件夾EWS

總體目標

如何查詢,以換取2013具體的折閱讀每封郵件的身體,這樣我可以從自動警報收集信息並寫入到CSV文件?

具體問題,我想不出

如何查詢特定的文件夾?

問題

我只能找到如何搜索收件箱中的例子。我需要改變這個說法來說一個特定的文件夾。

當前的代碼段,其中的問題在於

try 
      { 
       //read the subject line of the 10 most recently recieved emails in the inbox 
       FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, new ItemView(10)); 
       foreach (Item item in findResults.Items) 
       { 
        Console.WriteLine(item.Subject); 
       } 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine(e.Message.ToString()); 
       Console.ReadLine(); 
      } 
      Console.ReadLine(); 

線問題的

FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, new ItemView(10)); 

回答

2
try 
{ 
    //create searchable object called rootfolder and set root to equal Inbox 
    Folder rootfolder = Folder.Bind(service, WellKnownFolderName.Inbox); 
    //foreach child folder inside Ibox 
    foreach (Folder folder in rootfolder.FindFolders(new FolderView(100))) 
    { 
     //if the child folder is named hey 
     if (folder.DisplayName.Contains("hey")) 
     { 
      //create searchable object of child of root but now is root to be searched within folder and set it as root folder 
      Folder childfolder = Folder.Bind(service, folder.Id); 
      //foreach childfolder to new root 
      foreach (Folder cfolder in childfolder.FindFolders(new FolderView(100))) 
      { 
       //if child folder is blah then search items 
       if (cfolder.DisplayName.Contains("blah")) 
       { 
        //create searchable object of blah folder and set it as root folder 
        FindItemsResults<Item> blah = service.FindItems(cfolder.Id, new ItemView(10)); 
        //this will load all the extra properites for each email (SUCH AS BODY) 
        service.LoadPropertiesForItems(from Item item in blah select item, PropertySet.FirstClassProperties); 
        foreach (Item item in blah.Items) 
        { 
         //Console.WriteLine(item.DateTimeReceived + "\n\t" + item.Body); 
         Console.WriteLine(item.Subject); 
         Console.WriteLine("\t"+item.DateTimeReceived); 
         Console.WriteLine("\t" + item.Body.Text.ToString()); 
        } 
       } 
      } 
     } 
    } 


} 
catch (Exception e) 
{ 
    Console.WriteLine(e.Message.ToString()); 
} 
Console.ReadLine(); 
2

只是爲了後人,這裏是代碼通過一個特定的名字來定位一個文件夾(假設只有一個具有此名稱的文件夾存在)在EWS 2010中:

Public Function GetMailFolderByName(ByVal folderName As String) As Folder Implements IMailboxExchange.GetMailFolderByName 
    Me.ThrowIfNoConnection() 
    Dim folderView As FolderView = New FolderView(1) 
    folderView.PropertySet = New PropertySet(BasePropertySet.IdOnly) 
    folderView.PropertySet.Add(FolderSchema.DisplayName) 
    folderView.Traversal = FolderTraversal.Deep 
    Dim searchFilterByFolderName As SearchFilter = New SearchFilter.ContainsSubstring(FolderSchema.DisplayName, folderName) 
    Dim results As FindFoldersResults = Me._exchangeService.FindFolders(WellKnownFolderName.Root, searchFilterByFolderName, folderView) 
    If results Is Nothing OrElse results.Folders Is Nothing OrElse results.Folders.Count = 0 Then 
     Return Nothing 
    End If 
    Return results.Folders(0) 
End Function 

重要: 是的,我知道這是在VB.NET,但應該是翻譯爲C#。這也是EWS 2010而不是2013,但它們可能沒有那麼大的改變。

相關問題