Почему на некоторых компьютерах мои критерии папки поиска не применяются? - PullRequest
0 голосов
/ 12 февраля 2019

Я создал плагин для Outlook, который использует AdvancedSearch для поиска всех электронных писем с UserProperty, определенным моим плагином.

Это работает на моем рабочем столе и ноутбуке, но не работает на устройстве моего клиента.Мы оба используем новейшую версию Outlook из Office 365, однако он работает на Windows 7, а я на Windows 10. Я подозреваю, что это может быть проблемой групповой политики, поскольку он является частью организации, но говорит, что это не так.полезно, если я не могу указать, какую конкретную политику необходимо изменить, или что именно вызывает проблему, поэтому он может точно сказать ИТ-отделу, что не так.

Я включил сообщения об ошибках, чтобы я мог видеть любые исключения, но ни одно не появляется.Единственное время, когда выдается исключение (насколько мне известно), это когда надстройка пытается создать папки, если они уже есть;если папки удаляются, надстройка не создает исключений.

Это код, который добавляет папки поиска

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

1 Ответ

0 голосов
/ 22 марта 2019

Если вы никогда не добавляли свойство в поля папки (и, следовательно, указали тип свойства), Outlook будет предполагать, что «GDPRMarked» является строковым свойством.

Правильный критерий показывает PT_BOOLEAN тип свойства (0x8532 000B ), плохой указывает PT_UNICODE (0x8569 001F ).

...