查询特定的Exchange 2013文件夹EWS

时间:2013-07-08 17:58:11

标签: c# find exchangewebservices

非常感谢任何帮助,链接或想法。谢谢!

总体目标

如何查询Exchange 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 个答案:

答案 0 :(得分: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();

答案 1 :(得分: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年,但它们可能没有那么大的改变。