搜索文件夹中收件箱中未读的电子邮件,不包括子文件夹

时间:2019-10-16 07:26:56

标签: outlook

我想在收件箱中创建一个未读电子邮件的搜索文件夹,该文件夹会查看收件箱中的子文件夹。 现在,我有5-10个子文件夹,这些子文件夹会自动填充来自不同来源的新闻电子邮件(使用普通规则),然后将收件箱文件夹的顶层用作重要电子邮件文件夹。我想创建一个搜索文件夹,该文件夹可在收件箱文件夹的顶层找到未读的电子邮件,但忽略子文件夹中的所有内容。

Outlook版本:1808(我认为)。它是MS Office 365的一部分,但确实在本地运行。

1 个答案:

答案 0 :(得分:0)

您需要使用Application.AdvancedSearch方法,该方法根据指定的DAV搜索和定位(DASL)搜索字符串执行搜索。 Outlook对象模型中的AdvancedSearch方法和相关功能不会创建将出现在Outlook用户界面中的搜索文件夹。但是,您可以使用返回的Search对象的Save方法来创建一个搜索文件夹,该文件夹将出现在Outlook用户界面的“搜索文件夹”列表中。

在Outlook中使用AdvancedSearch方法的主要好处是:

  • 搜索是在另一个线程中执行的。您不需要手动运行另一个线程,因为AdvancedSearch方法会在后台自动运行它。
  • 可以在任何位置(即超出某个文件夹的范围)搜索任何项目类型:邮件,约会,日历,便笺等。可以将Restrict和Find / FindNext方法应用于特定的Items集合(请参阅Outlook中Items类的Folder属性)。
  • 完全支持DASL查询(自定义属性也可用于搜索)。您可以在MSDN的Filtering文章中了解有关此内容的更多信息。为了提高搜索性能,如果为商店启用了“即时搜索”,则可以使用“即时搜索”关键字(请参阅Store类的IsInstantSearchEnabled属性)。
  • 您可以随时使用Search类的Stop方法停止搜索过程。
    string scope = "Inbox";
    string filter = "[UnRead] = true";            
    Outlook.Search advancedSearch = null;
    Outlook.MAPIFolder folderInbox = null;
    Outlook.MAPIFolder folderSentMail = null;
    Outlook.NameSpace ns = null;
    try
    {
        ns = OutlookApp.GetNamespace("MAPI");
        folderInbox = ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
        scope = "\'" + folderInbox.FolderPath "\'";
        advancedSearch = OutlookApp.AdvancedSearch(
                                        scope, filter, false, advancedSearchTag );
        advancedSearch.Save();
     }
     catch(Exception ex)
     {
         MessageBox.Show(ex.Message, "An eexception is thrown");
     }
     finally
     {
         if(advancedSearch!=null) Marshal.ReleaseComObject(advancedSearch);
         if (folderSentMail != null) Marshal.ReleaseComObject(folderSentMail);
         if (folderInbox != null) Marshal.ReleaseComObject(folderInbox);
         if (ns != null) Marshal.ReleaseComObject(ns);
    }                

相关问题