Поделиться через


Открытие хранилища сообщений

Область применения: Outlook 2013 | Outlook 2016

В зависимости от профиля клиенту потребуется открыть одно или несколько хранилищ сообщений во время обычного сеанса. Открытие хранилища сообщений означает получение доступа к указателю на реализацию IMsgStore : IMAPIProp . Интерфейс IMsgStore предоставляет методы для уведомления, назначения папок и доступа к папкам и сообщениям.

Клиенты открывают хранилища сообщений при входе в систему и при изменении профиля. Если клиент разрешает пользователям добавлять хранилища сообщений в профиль во время активного сеанса, их можно открыть немедленно или игнорировать до следующего сеанса. Зарегистрировав уведомления в таблице хранилища сообщений, вы получите оповещение о доступности нового хранилища сообщений.

Чтобы открыть хранилище сообщений, необходимо иметь его идентификатор записи. Большинство клиентов получают доступ к идентификаторам записей для хранилищ сообщений, которые они хотят открыть через таблицу хранилища сообщений. Однако некоторые хранилища сообщений документируют формат идентификаторов входа, что позволяет клиентам обходить таблицу хранилища сообщений и создавать необходимый идентификатор записи. Они могут передавать этот идентификатор записи непосредственно в IMAPISession::OpenMsgStore , а MAPI автоматически создает раздел профиля для поставщика, не связывая его со службой сообщений.

Получение идентификатора записи из таблицы хранилища сообщений

  1. Вызовите IMAPISession::GetMsgStoresTable , чтобы открыть таблицу хранилища сообщений.

  2. Вызовите IMAPITable::SetColumns , чтобы ограничить таблицу небольшим набором столбцов, который включает следующие столбцы:

    • PR_PROVIDER_DISPLAY или PR_DISPLAY_NAME
    • свойства PR_ENTRYID
    • PR_MDB_PROVIDER
    • PR_RESOURCE_FLAGS
  3. Создайте ограничение, чтобы отфильтровать строку, представляющую открывающееся хранилище сообщений. Дополнительные сведения о поиске хранилища сообщений по умолчанию см. в разделе Открытие хранилища сообщений по умолчанию. Чтобы найти хранилище сообщений по имени, примените любое из следующих ограничений свойств:

    • Сопоставление PR_PROVIDER_DISPLAY (PidTagProviderDisplay) с общим именем для этого типа хранилища сообщений. Например, для PR_PROVIDER_DISPLAY может быть задано значение "Личные папки".

    • Сопоставьте PR_MDB_PROVIDER (PidTagStoreProvider) с конкретным MAPIUID для этого типа хранилища сообщений.

    • Сопоставление PR_DISPLAY_NAME (PidTagDisplayName) с именем этого конкретного хранилища сообщений. Например, для PR_DISPLAY_NAME может быть задано значение "Мои сообщения за финансовый год 2010".

  4. Вызовите HrQueryAllRows , чтобы получить соответствующую строку из таблицы хранилища сообщений. Идентификатор записи для строки будет включен в массив значений свойств для члена aRow набора строк, на который указывает параметр pprows .

  5. Вызовите FreeProws, чтобы освободить набор строк, на который указывает pprows.

  6. Отпустите таблицу хранилища сообщений, вызвав ее метод IUnknown::Release .

Если вы создали пользовательский идентификатор записи для открываемого хранилища сообщений, вызовите функцию WrapStoreEntryID , чтобы преобразовать его в стандартный идентификатор записи.

После получения идентификатора записи хранилища сообщений вызовите один из следующих методов, чтобы открыть его:

Вызовите OpenMsgStore , если необходимо указать различные специальные параметры для хранилища сообщений. OpenMsgStore позволяет подавлять отображение диалоговых окон, определять хранилище сообщений как временное или как немессугируемое хранилище, задавать уровни доступа и откладывать ошибки. OpenEntry позволяет только задавать уровни доступа и откладывать ошибки.

Установка флага MDB_NO_MAIL указывает mapI, что хранилище сообщений не будет использоваться для отправки или получения сообщений. MAPI не информирует диспетчер очереди MAPI о существовании этого хранилища сообщений. Флаг MDB_TEMPORARY обозначает хранилище сообщений как временное, подразумевая, что оно не может использоваться для хранения постоянной информации. Временные хранилища сообщений не отображаются в таблице хранилища сообщений.

См. также