Открытие папки хранилища сообщений
Область применения: Outlook 2013 | Outlook 2016
Прежде чем открыть любую папку, ее идентификатор записи должен быть доступен. Для большинства папок это означает получение свойств PR_ENTRYID . Для специальных папок, таких как некоторые папки поддеревого кода IPM и другие корневые папки, MAPI определяет специальные свойства идентификатора записи, доступные путем вызова метода IMAPIProp::GetProps хранилища сообщений. Эти идентификаторы записей всегда являются долгосрочными и именуются следующим образом:
Folder | Свойство идентификатора записи |
---|---|
����� ���������� |
PR_IPM_OUTBOX_ENTRYID (PidTagIpmOutboxEntryId) (только класс сообщений IPM) |
папка "Удаленные" |
PR_IPM_WASTEBASKET_ENTRYID (PidTagIpmWastebasketEntryId) |
����� ������������� |
PR_IPM_SENTMAIL_ENTRYID (PidTagIpmSentMailEntRyId) |
IPM �������� ����� |
PR_IPM_SUBTREE_ENTRYID (PidTagIpmSubtreeEntryId) |
�������� ����� ����������� ������ |
PR_FINDER_ENTRYID (PidTagFinderEntryId) |
Корневая папка common views |
PR_COMMON_VIEWS_ENTRYID (PidTagCommonViewsEntryId) |
Корневая папка личных представлений |
PR_VIEWS_ENTRYID (PidTagViewsEntryId) |
Корневая папка контактов |
PR_IPM_CONTACT_ENTRYID (PidTagIpmContactEntryId) |
Корневая папка черновиков |
PR_IPM_DRAFTS_ENTRYID (PidTagIpmDraftsEntryId) |
Журнал корневой папке |
PR_IPM_JOURNAL_ENTRYID (PidTagIpmJournalEntryId) |
Корневая папка календаря |
PR_IPM_APPOINTMENT_ENTRYID (PidTagIpmAppointmentEntryId) |
Корневая папка Notes |
PR_IPM_NOTE_ENTRYID (PidTagIpmNoteEntryId) |
Корневая папка "Задачи" |
PR_IPM_TASK_ENTRYID (PidTagIpmTaskEntryId) |
Прежде чем пытаться получить один из этих специальных идентификаторов записи, получите свойство PR_VALID_FOLDER_MASK (PidTagValidFolderMask) хранилища сообщений. PR_VALID_FOLDER_MASK — это битовая маска, которая определяет, какой из специальных идентификаторов записей существует. Для каждой из специальных папок имеется по одному биту. Если задан бит, это означает, что соответствующая папка поддерживается и имеет допустимый идентификатор записи. Например, если папка "Удаленные" существует и имеет допустимый идентификатор записи, FOLDER_IPM_WASTEBASKET_VALID бит будет задан в PR_VALID_FOLDER_MASK.
Откройте папку, в которой размещаются все входящие сообщения определенного класса.
Вызовите IMsgStore::GetReceiveFolder , чтобы получить идентификатор записи, задав параметр lpszMessageClass так, чтобы он указывал на символьную строку, идентифицируя класс сообщения. Например, если вы хотите открыть папку "Входящие" для поддеревого элемента IPM, укажите значение lpszMessageClass на IPM. Если вы хотите открыть папку получения для сообщений IPC, задайте для нее указатель на IPC.
Если для класса сообщений нет зарегистрированной папки получения, GetReceiveFolder выбирает папку получения, связанный с ней класс сообщения соответствует самому длинному префиксу переданного класса сообщения. Дополнительные сведения см. в разделе Папки получения MAPI.
Обратите внимание, что свойство PR_IPM_OUTBOX_ENTRYID используется для открытия папки Outbox только для сообщений IPM. Если вы открываете папку "Исходящие" для сообщений IPC, используйте вместо этого идентификатор записи для папки получения. В папку получения помещаются как входящие, так и исходящие сообщения IPC.
Вызовите один из четырех методов OpenEntry , чтобы открыть папку и вернуть указатель интерфейса, который можно использовать для доступа к ней. Чтобы открыть папку, можно вызвать любой из следующих методов:
Выбор конкретного метода зависит от открываемой папки и доступных объектов. Так как метод IMAPISession может открыть любую папку для любого хранилища сообщений в текущем профиле, вызовите этот метод OpenEntry , если вы ничего не знаете о открываемой папке. Если вы знаете, какое хранилище сообщений принадлежит папке и у вас есть указатель на хранилище сообщений, вызовите IMsgStore::OpenEntry.
Например, используйте метод IMsgStore , чтобы открыть папку получения. Если у вас есть указатель на объект входа поставщика хранилища сообщений, вызовите IMSLogon::OpenEntry. Так как эти вызовы передаются непосредственно поставщику хранилища сообщений, а не через MAPI, обработка выполняется быстрее. Если открываемая папка является вложенной папкой папки, которая уже открыта, вызовите метод IMAPIContainer::OpenEntry открытой папки. Метод IMAPIContainer открывает только вложенные папки открытой папки и является единственным методом, гарантированно работающим с краткосрочными идентификаторами входа.
Если вы хотите иметь возможность вносить изменения в открываемую папку, укажите уровень доступа, задав флаг MAPI_BEST_ACCESS или MAPI_MODIFY в вызове OpenEntry . Эти флаги представляют собой предложения поставщику хранилища сообщений предоставить самый высокий уровень доступа для MAPI_BEST_ACCESS или для чтения и записи для MAPI_MODIFY при открытии папки.
Так как эти флаги являются только предложениями, папка может быть открыта или не открыта с ожидаемым уровнем доступа. Извлекая свойство PR_ACCESS (PidTagAccess), можно определить диапазон операций, которые можно выполнить с открытой папкой.
Однако поскольку многие поставщики хранилища сообщений вычисляют значение для этого свойства по запросу, а не поддерживают его в качестве свойства папки или столбца в таблице иерархии, его получение может занять много времени. Альтернативная стратегия заключается в том, чтобы попытаться выполнить любую операцию и при необходимости вернуть ошибку.