【问题标题】:How do I "Search All Mailboxes" in all Outlook Shared Mailbox Folders at once via c#?如何通过 c# 一次在所有 Outlook 共享邮箱文件夹中“搜索所有邮箱”?
【发布时间】:2016-11-22 20:01:11
【问题描述】:

我想通过 c# 和 windows 窗体模仿 Outlook 的最新版本搜索功能。具体来说,我想为给定的字符串“搜索所有邮箱”。有超过 50 个文件夹和 90,000 封电子邮件。

目前,我可以使用 LINQ 搜索任何一个文件夹并获得结果。我编写了一些代码来遍历所有文件夹并创建一个可以查询的大量 IEnumberable。

public IEnumerable<MailItem> SharedInbox
    {

        get
        {
            outlook.ActiveExplorer().Session.GetDefaultFolder(OlDefaultFolders.olFolderInbox);
            Outlook.Recipient recip = Outlook.Application.Session.CreateRecipient("TOCCard@Capitalone.Com");
            Microsoft.Office.Interop.Outlook.MAPIFolder folder =
                    outlook.GetNamespace("MAPI").GetSharedDefaultFolder(recip, OlDefaultFolders.olFolderInbox);
            Folders subFolders = folder.Folders;
            IEnumerable<MailItem> mItems  = folder.Folders[1].Items.OfType<MailItem>();

            if (recip.Resolve())
            {
                System.Diagnostics.Debug.WriteLine("Email Address Resolve Successful.\r\n");
                try
                {
                    foreach (MAPIFolder fold in subFolders)
                    {
                        System.Diagnostics.Debug.WriteLine("Try Folder: " + fold.Name + " \r\n");
                        try
                        {
                           mItems = mItems.Concat(fold.Items.OfType<MailItem>());
                        }
                        catch
                        { System.Diagnostics.Debug.WriteLine("No items found:\r\n"); }
                    }


                    return mItems;
                }
                catch
                {
                    return null;
                }

            }
            else
            {
                System.Diagnostics.Debug.WriteLine("ELSE");
                return null;

            }

        }

这最终会奏效,但您可能会想象这非常缓慢,因此毫无用处。 我是 LINQ 的新手,我觉得必须有更快的方法。这个代码可以调整吗?我不是 Exchange 管理员,除了我自己的收件箱外,我无法访问 Exchange 服务器。此外,我没有与 LINQ 结婚,很乐意使用其他方法。感谢您的帮助。

注意:我刚刚注意到上面的代码通过文件夹 [1] 两次。我可以解决这个问题,但不会显着影响所需的时间。

【问题讨论】:

    标签: c# linq outlook ienumerable


    【解决方案1】:

    不,不要将 LINQ 与 OOM 一起使用。使用Items.Find/FindNextItems.Restrict

    你也可以使用Aplication.AdvancedSearch(记住它是异步的)。

    【讨论】:

      猜你喜欢
      • 2018-11-20
      • 1970-01-01
      • 1970-01-01
      • 2018-09-05
      • 2017-06-05
      • 1970-01-01
      • 1970-01-01
      • 2017-12-07
      • 1970-01-01
      相关资源
      最近更新 更多