How to: Connect to a Message Store
Before you can create and manipulate message folders and message items, you must establish a connection to a message store.
To open a connection to a message store
Initialize the MAPI subsystem, and log onto a MAPI session. For more information, see How to: Begin a MAPI Session.
Declare a NULL IMAPITable interface object, and get the message stores table by using IMAPISession::GetMsgStoresTable, as follows:
hr = pSession->GetMsgStoresTable(0, &pTable);
Declare a NULL SRowSet structure, and populate it with property values from one of the message stores by using IMAPITable::QueryRows. The following code retrieves the first (default) message store:
hr = pTable->QueryRows(1, 0, &pSRowSet);
Declare a NULL IMsgStore interface object, and open the message store by using IMAPISession::OpenMsgStore — making use of the SRowSet structure:
hr = pSession->OpenMsgStore(0, pSRowSet->aRow[0].lpProps[0].Value.bin.cb, (ENTRYID *)pSRowSet->aRow[0].lpProps[0].Value.bin.lpb, NULL, 0, &pStore);
If no longer needed, release the message stores table by calling IUnknown::Release on the table object, and free the memory allocated for the row set structure by calling FreeProws:
pTable->Release(); FreeProws(pSRowSet);
Example
The following code demonstrates how to connect to a message store.
HRESULT hr;
ICEMAPISession * pSession = NULL;
IMAPITable * pTable = NULL;
SRowSet * pSRowSet = NULL;
IMsgStore * pStore = NULL;
// See the code example in "How to: Begin a MAPI Session" for
// information on obtaining pSession.
hr = pSession->GetMsgStoresTable(0, &pTable);
if (hr != S_OK) {
// GetMsgStoresTable failed.
MessageBox(NULL,
_T("GetMsgStoresTable failed."),
_T("Warning"),
MB_OK);
exit(0); // Replace with specific error handling.
}
BOOL QRError = FALSE;
hr = pTable->QueryRows(1, 0, &pSRowSet);
if (hr != S_OK) {
QRError = TRUE;
} else if (pSRowSet->cRows != 1) {
QRError = TRUE;
} else if ((pSRowSet->aRow[0].cValues < 1)
|| (pSRowSet->aRow[0].lpProps[0].ulPropTag != PR_ENTRYID)) {
QRError = TRUE;
}
if (QRError) {
// QueryRows failed.
MessageBox(NULL,
_T("QueryRows failed."),
_T("Warning"),
MB_OK);
exit(0); // Replace with specific error handling.
}
hr = pSession->OpenMsgStore(0,
pSRowSet->aRow[0].lpProps[0].Value.bin.cb,
(ENTRYID *)pSRowSet->aRow[0].lpProps[0].Value.bin.lpb,
NULL,
0,
&pStore);
if (hr != S_OK) {
// OpenMsgStore failed.
MessageBox(NULL,
_T("OpenMsgStore failed."),
_T("Warning"),
MB_OK);
exit(0); // Replace with specific error handling.
}
pTable->Release();
FreeProws(pSRowSet);
pTable = NULL;
pSRowSet = NULL;
See Also
Send feedback on this topic to the authors.
© 2005 Microsoft Corporation. All rights reserved.