我想在收件箱中创建一个未读电子邮件的搜索文件夹,该文件夹不会查看收件箱中的子文件夹。 现在,我有5-10个子文件夹,这些子文件夹会自动填充来自不同来源的新闻电子邮件(使用普通规则),然后将收件箱文件夹的顶层用作重要电子邮件文件夹。我想创建一个搜索文件夹,该文件夹可在收件箱文件夹的顶层找到未读的电子邮件,但忽略子文件夹中的所有内容。
Outlook版本:1808(我认为)。它是MS Office 365的一部分,但确实在本地运行。
答案 0 :(得分:0)
您需要使用Application.AdvancedSearch方法,该方法根据指定的DAV搜索和定位(DASL)搜索字符串执行搜索。 Outlook对象模型中的AdvancedSearch
方法和相关功能不会创建将出现在Outlook用户界面中的搜索文件夹。但是,您可以使用返回的Search对象的Save方法来创建一个搜索文件夹,该文件夹将出现在Outlook用户界面的“搜索文件夹”列表中。
在Outlook中使用AdvancedSearch
方法的主要好处是:
Items
集合(请参阅Outlook中Items
类的Folder
属性)。 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);
}