我创建了一个Outlook加载项,该加载项使用AdvancedSearch查找所有由我的加载项定义的UserProperty电子邮件。
这可以在我自己的台式机和笔记本电脑上使用,但不能在客户的设备上使用。我们俩都使用Office 365的最新版本的Outlook,但是他使用的是Windows 7,而我使用的是Windows10。我怀疑这可能是组策略问题,因为他是组织的一部分,但告诉他这不是组织的一部分除非我可以指出需要更改的特定策略或导致问题的确切原因,否则它很有用,因此他可以告诉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
他的PC在收件箱中显示此信息:
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
答案 0 :(得分:0)
如果您从未将属性添加到文件夹字段(并因此指定了属性类型),则Outlook将假定“ GDPRMarked”是字符串属性。
正确的条件显示PT_BOOLEAN
属性类型(0x8532 000B ),错误的条件显示PT_UNICODE
(0x8569 001F )。