【发布时间】:2016-11-29 13:23:03
【问题描述】:
我正在尝试在我的收件箱和所有子文件夹中搜索主题行中的给定字符串。我在网上找到了以下代码(https://www.add-in-express.com/creating-addins-blog/2012/05/31/outlook-search-csharp-vbnet/),但它返回的结果为零,这不是预期的结果。
我查看了 Outlook 中视图设置下的过滤器,以查找在 Outlook Explorer 中返回结果的给定搜索词,并得到以下查询:“http://schemas.microsoft.com/mapi/proptag/0x0037001f”LIKE '%Ticket%' 当我将其插入以下代码时,我同样得到零结果。
当我使用 LINQ 查询这些文件夹时(LINQ 太慢,无法在这里成为真正的解决方案),我可以得到结果,所以我猜我在使用高级搜索时会出现语法错误。很难在网络上找到使用示例。我会感谢任何可以帮助我的人。
private Search RunAdvancedSearch(Outlook._Application OutlookApp, string wordInSubject)
{
string advancedSearchTag = "New Search";
string scope = "Inbox";
string filter = "\"urn:schemas:mailheader:subject\" LIKE '%"+ wordInSubject +"%'";
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);
folderSentMail = ns.GetDefaultFolder(
Outlook.OlDefaultFolders.olFolderSentMail);
scope = "\'" + folderInbox.FolderPath +
"\',\'" + folderSentMail.FolderPath + "\'";
advancedSearch = OutlookApp.AdvancedSearch(
scope, filter, true, advancedSearchTag);
System.Diagnostics.Debug.WriteLine(advancedSearch.Results.Count);
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message, "An exception 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);
}
return advancedSearch;
}
【问题讨论】:
标签: c# search outlook advanced-search