为什么我的自定义搜索文件夹条件未在某些计算机上应用?

问题描述 投票:0回答:1

我已经创建了一个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
vsto outlook-addin
1个回答
0
投票

如果您从未将属性添加到文件夹字段(因此指定了属性类型),Outlook将假定“GDPRMarked”是字符串属性。

正确的标准显示PT_BOOLEAN属性类型(0x8532000B),坏标准指定PT_UNICODE(0x8569001F)。

© www.soinside.com 2019 - 2024. All rights reserved.