2013-07-08 2 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, но они, возможно, не так сильно изменились.

Смежные вопросы