В объектной модели Outlook ничего для этого не предусмотрено. Вы можете искать в одном магазине, но не в нескольких профилях одновременно. Однако вы можете получить доступ к общим почтовым ящикам, используя метод GetSharedDefaultFolder
, который возвращает объект Folder
, представляющий заданную папку по умолчанию для указанного пользователя. Таким образом, вы можете выполнить несколько поисков в разных хранилищах.
Рассмотрите возможность использования метода AdvancedSearch класса Application, который имеет следующие ключевые преимущества:
- Поиск выполняется в другом потоке. Вам не нужно запускать другой поток вручную, поскольку метод
AdvancedSearch
запускает его автоматически в фоновом режиме. - Возможность поиска любых типов элементов: почта, встреча, календарь, заметки и c. в любом месте, т.е. за пределами определенной папки. Методы Restrict и
Find
/ FindNext
могут применяться к конкретной коллекции Items
(см. Свойство Items
класса Folder
в Outlook). - Полная поддержка запросов DASL ( пользовательские свойства также могут использоваться для поиска). Подробнее об этом можно прочитать в статье Фильтрация в MSDN. Чтобы повысить производительность поиска, можно использовать ключевые слова мгновенного поиска, если для магазина включен мгновенный поиск (см. Свойство
IsInstantSearchEnabled
класса Store
). - Вы можете остановить процесс поиска в любой момент используя метод
Stop
класса Search
.
Используя параметр Scope
, вы можете указать одну или несколько папок в одном хранилище, но вы не можете указать несколько папок в нескольких магазины. Чтобы указать несколько папок в одном хранилище для параметра Scope
, используйте символ запятой между каждым путем к папке и заключите каждый путь к папке в одинарные кавычки. Для папок по умолчанию, таких как Inbox
или Sent Items
, вы можете использовать простое имя папки вместо полного пути к папке. Например, следующие две строки кода представляют допустимые параметры Scope
:
Scope = "'Inbox', 'Sent Items'"
, и вы также можете использовать путь к папке:
Scope = "'" & Application.Session.GetDefaultFolder(olFolderInbox).FolderPath _
& "','" & Application.Session.GetDefaultFolder(olFolderSentMail).FolderPath & "'"
Подробнее о методе AdvancedSearch см. Расширенный поиск в Outlook программно: C#, VB. NET статья.