我已经创建了一个Outlook插件,它使用AdvancedSearch查找具有我的插件定义的UserProperty的所有电子邮件。
这适用于我自己的台式机和笔记本电脑,但不适用于我客户的设备。我们都使用Office 365中最新版本的Outlook,但是他在Windows 7上,我在Windows 10上。我怀疑这可能是一个组策略问题,因为他是一个组织的一部分,但告诉他不是除非我能指出需要改变哪些具体政策,或究竟是什么导致了这个问题,否则他可以告诉IT部门究竟出了什么问题。
我已启用错误消息,因此我可以看到任何异常,但都没有显示。抛出异常的唯一一次(据我所知)是当插件尝试创建文件夹时(如果它们已经存在);如果文件夹被删除,则插件不会抛出任何异常。
这是添加搜索文件夹的代码
private void SearchFolders(Outlook.Application application)
{
string scope = "Inbox";
string filter = $"http://schemas.microsoft.com/mapi/string/{{00020329-0000-0000-C000-000000000046}}/{userProperty} = true";
Outlook.Search search = null;
Outlook.MAPIFolder folderInbox = null;
Outlook.MAPIFolder folderSentMail = null;
Outlook.NameSpace ns = null;
try
{
ns = application.GetNamespace("MAPI");
folderInbox = ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
//MessageBox.Show(folderInbox.FolderPath.ToString());
folderSentMail = ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail);
scope = "\'" + folderInbox.FolderPath + "\'";
search = application.AdvancedSearch(scope, filter, true);
search.Save("GDPR - indbakke");
scope = "\'" + folderSentMail.FolderPath + "\'";
search = application.AdvancedSearch(scope, filter, true);
search.Save("GDPR - Sendt post");
}
catch (Exception e)
{
MessageBox.Show(e.StackTrace, "An exception was thrown");
}
finally
{
if (search != null) Marshal.ReleaseComObject(search);
if (folderInbox != null) Marshal.ReleaseComObject(folderInbox);
if (folderSentMail != null) Marshal.ReleaseComObject(folderSentMail);
if (ns != null) Marshal.ReleaseComObject(ns);
}
}
变量userProperty被实例化为文件顶部的字符串,并且只是UserProperty的名称。
搜索文件夹应包含UserProperty设置为true的所有邮件。但是,收件箱搜索文件夹有时会包含收件箱中的所有电子邮件,而“已发送邮件”搜索文件夹将根本不包含任何内容。
我知道在他的设备上标记电子邮件是有效的,因为我添加的列显示了此属性,并显示电子邮件已正确标记。这只是搜索文件夹不起作用。
查看OutlookSpy中的搜索条件,可以看出我的计算机上的标准与他的标准不同。我的电脑显示以下内容:
rt : RES_PROPERTY
res.resProperty :
relop : RELOP_EQ
ulPropTag : GDPRMarked (0x8532000B)
lpProp :
ulPropTag : GDPRMarked (0x8532000B)
Value : true
而他的电脑显示收件箱:
rt : RES_EXIST
res.resExist :
ulPropTag : PR_SUBJECT_W (0x0037001F)
这对于传出:
rt : RES_PROPERTY
res.resProperty :
relop : RELOP_EQ
ulPropTag : http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/GDPRMarked (0x8569001F)
lpProp :
ulPropTag : http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/GDPRMarked (0x8569001F)
Value : true
如果您从未将属性添加到文件夹字段(因此指定了属性类型),Outlook将假定“GDPRMarked”是字符串属性。
正确的标准显示PT_BOOLEAN
属性类型(0x8532000B),坏标准指定PT_UNICODE
(0x8569001F)。