Открытие хранилища сообщений
Область применения: Outlook 2013 | Outlook 2016
В зависимости от профиля клиенту потребуется открыть одно или несколько хранилищ сообщений во время обычного сеанса. Открытие хранилища сообщений означает получение доступа к указателю на реализацию IMsgStore : IMAPIProp . Интерфейс IMsgStore предоставляет методы для уведомления, назначения папок и доступа к папкам и сообщениям.
Клиенты открывают хранилища сообщений при входе в систему и при изменении профиля. Если клиент разрешает пользователям добавлять хранилища сообщений в профиль во время активного сеанса, их можно открыть немедленно или игнорировать до следующего сеанса. Зарегистрировав уведомления в таблице хранилища сообщений, вы получите оповещение о доступности нового хранилища сообщений.
Чтобы открыть хранилище сообщений, необходимо иметь его идентификатор записи. Большинство клиентов получают доступ к идентификаторам записей для хранилищ сообщений, которые они хотят открыть через таблицу хранилища сообщений. Однако некоторые хранилища сообщений документируют формат идентификаторов входа, что позволяет клиентам обходить таблицу хранилища сообщений и создавать необходимый идентификатор записи. Они могут передавать этот идентификатор записи непосредственно в IMAPISession::OpenMsgStore , а MAPI автоматически создает раздел профиля для поставщика, не связывая его со службой сообщений.
Получение идентификатора записи из таблицы хранилища сообщений
Вызовите IMAPISession::GetMsgStoresTable , чтобы открыть таблицу хранилища сообщений.
Вызовите IMAPITable::SetColumns , чтобы ограничить таблицу небольшим набором столбцов, который включает следующие столбцы:
- PR_PROVIDER_DISPLAY или PR_DISPLAY_NAME
- свойства PR_ENTRYID
- PR_MDB_PROVIDER
- PR_RESOURCE_FLAGS
Создайте ограничение, чтобы отфильтровать строку, представляющую открывающееся хранилище сообщений. Дополнительные сведения о поиске хранилища сообщений по умолчанию см. в разделе Открытие хранилища сообщений по умолчанию. Чтобы найти хранилище сообщений по имени, примените любое из следующих ограничений свойств:
Сопоставление PR_PROVIDER_DISPLAY (PidTagProviderDisplay) с общим именем для этого типа хранилища сообщений. Например, для PR_PROVIDER_DISPLAY может быть задано значение "Личные папки".
Сопоставьте PR_MDB_PROVIDER (PidTagStoreProvider) с конкретным MAPIUID для этого типа хранилища сообщений.
Сопоставление PR_DISPLAY_NAME (PidTagDisplayName) с именем этого конкретного хранилища сообщений. Например, для PR_DISPLAY_NAME может быть задано значение "Мои сообщения за финансовый год 2010".
Вызовите HrQueryAllRows , чтобы получить соответствующую строку из таблицы хранилища сообщений. Идентификатор записи для строки будет включен в массив значений свойств для члена aRow набора строк, на который указывает параметр pprows .
Вызовите FreeProws, чтобы освободить набор строк, на который указывает pprows.
Отпустите таблицу хранилища сообщений, вызвав ее метод IUnknown::Release .
Если вы создали пользовательский идентификатор записи для открываемого хранилища сообщений, вызовите функцию WrapStoreEntryID , чтобы преобразовать его в стандартный идентификатор записи.
После получения идентификатора записи хранилища сообщений вызовите один из следующих методов, чтобы открыть его:
Вызовите OpenMsgStore , если необходимо указать различные специальные параметры для хранилища сообщений. OpenMsgStore позволяет подавлять отображение диалоговых окон, определять хранилище сообщений как временное или как немессугируемое хранилище, задавать уровни доступа и откладывать ошибки. OpenEntry позволяет только задавать уровни доступа и откладывать ошибки.
Установка флага MDB_NO_MAIL указывает mapI, что хранилище сообщений не будет использоваться для отправки или получения сообщений. MAPI не информирует диспетчер очереди MAPI о существовании этого хранилища сообщений. Флаг MDB_TEMPORARY обозначает хранилище сообщений как временное, подразумевая, что оно не может использоваться для хранения постоянной информации. Временные хранилища сообщений не отображаются в таблице хранилища сообщений.