Как выполнить поиск в Outlook с помощью надстройки VSTO, включая почтовые сообщения, хранящиеся на сервере - PullRequest
0 голосов
/ 21 октября 2019

У меня есть надстройка для Outlook, которую я написал, которая будет искать в моем локальном хранилище данных, находить электронные письма и выполнять над ними действия. Это хорошо работает, и у меня нет проблем с этим.

Однако, если электронная почта существует на сервере (например, если я ищу электронную почту через интерфейс Outlook, она не отображается, пока явыберите «Найти больше на сервере»), как мне программно искать / выбирать / взаимодействовать с этим письмом. Нужно ли выбрать флаг или тип поиска?

Спасибо,

~ D

1 Ответ

0 голосов
/ 23 октября 2019

Самым простым способом является, конечно, убедиться, что все сообщения кэшируются локально в файле OST.

Другие варианты - открыть папку в онлайн-режиме. На уровне Extended MAPI (C ++ или Delphi) вам нужно будет использовать MAPI_NO_CACHE бит при вызове IMAPISession::OpenEntry - вы можете играть с этим битом в OutlookSpy : нажмите кнопку IMAPIFolder, выберите свойство PR_ENTRYID, справащелкните, выберите IMAPISession :: OpenEntry, убедитесь, что MAPI_NO_CACHE отмечен.

В случае языков, отличных от C ++ или Delphi, вы можете использовать Redemption - его версии GetFolderFromID, GetMessageFromID и т. д. позволяют передавать флажки, которые будут использоваться IMAPISession::OpenEntry.

MAPI_NO_CACHE = &H0200
MAPI_BEST_ACCESS = &H0010
set OomFolder = Application.ActiveExplorer.CurrentFolder
set Session = CreateObject("Redemption.RDOSession")
Session.MAPIOBJECT = Application.Session.MAPIOBJECT
set RdoFolder = Session.GetFolderFromID(OomFolder.EntryID, , MAPI_NO_CACHE Or MAPI_BEST_ACCESS)
MsgBox "Number of items in the online folder: " & RdoFolder.Items.Count

Затем можно выполнить поиск в сетевой версии папки, используя RDOFolder.Items.Find/FindNext/Restrict/MAPITable.ExecSQL.

...