Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
New messages are always created from a message store's Drafts folder. After you create a message, you can set its property values (subject, body, list of recipients, and so on) and then send the message.
To create a message object
Initialize the MAPI subsystem, and log onto a MAPI session. For more information, see How to: Begin a MAPI Session.
Establish a connection to a message store. For more information, see How to: Connect to a Message Store.
Initialize the property tag array to request the Entry ID property value of the Drafts folder by setting the property tag of the array to PR_CE_IPM_DRAFTS_ENTRYID:
SPropTagArray STags = { 1, {PR_CE_IPM_DRAFTS_ENTRYID} };Get the Entry ID property value of the Drafts folder by calling IMAPIProp::GetProps on the message store object:
hr = pStore->GetProps(&STags, 0, &cValues, &pSProps);Open the Drafts folder by calling IMsgStore::OpenEntry for the returned Entry ID:
hr = pStore->OpenEntry(pSProps[0].Value.bin.cb, (LPENTRYID)pSProps[0].Value.bin.lpb, NULL, 0, &ulObjType, (IUnknown **)&pFldrDrafts);Declare a NULL IMessage interface object, and then create a new message in the Drafts folder by using the IMAPIFolder::CreateMessage method:
hr = pFldrDrafts->CreateMessage(NULL, 0, &pMsg);If no longer needed, release the message store and Drafts folder by calling IUnknown::Release on their interface objects, and free the memory allocated for the property value structure by calling MAPIFreeBuffer:
pStore->Release(); pFldrDrafts->Release(); MAPIFreeBuffer(pSProps);
Code Example
The following code example demonstrates how to create a message.
Note To make the following code example easier to read, security checking and error handling are not included. This code example should not be used in a release configuration unless it has been modified to include them.
HRESULT hr;
IMsgStore * pStore = NULL;
SPropTagArray STags = { 1, {PR_CE_IPM_DRAFTS_ENTRYID} };
ULONG cValues = 0;
SPropValue * pSProps = NULL;
ULONG ulObjType = 0;
IMAPIFolder * pFldrDrafts = NULL;
// See the code example in "How to: Connect to a Message Store" for
// information on obtaining pStore.
BOOL GPError = FALSE;
hr = pStore->GetProps(&STags, 0, &cValues, &pSProps);
if (hr != S_OK) {
GPError = TRUE;
} else if (pSProps == NULL) {
GPError = TRUE;
} else if (pSProps[0].ulPropTag != PR_CE_IPM_DRAFTS_ENTRYID) {
GPError = TRUE;
}
if (GPError) {
// GetProps failed.
MessageBox(NULL,
_T("GetProps failed."),
_T("Warning"),
MB_OK);
exit(0); // Replace with specific error handling.
}
BOOL OEError = FALSE;
hr = pStore->OpenEntry(pSProps[0].Value.bin.cb,
(LPENTRYID)pSProps[0].Value.bin.lpb,
NULL,
0,
&ulObjType,
(IUnknown **)&pFldrDrafts);
if (hr != S_OK) {
OEError = TRUE;
} else if (pFldrDrafts == NULL) {
OEError = TRUE;
}
if (OEError) {
// OpenEntry failed.
MessageBox(NULL,
_T("OpenEntry failed."),
_T("Warning"),
MB_OK);
exit(0); // Replace with specific error handling.
}
BOOL CMError = FALSE;
hr = pFldrDrafts->CreateMessage(NULL, 0, &pMsg);
if (hr != S_OK) {
CMError = TRUE;
} else if (pMsg == NULL) {
CMError = TRUE;
}
if (CMError) {
// CreateMessage failed.
MessageBox(NULL,
_T("CreateMessage failed."),
_T("Warning"),
MB_OK);
exit(0); // Replace with specific error handling.
}
pStore->Release();
pFldrDrafts->Release();
MAPIFreeBuffer(pSProps);
pStore = NULL;
pFldrDrafts = NULL;
pSProps = NULL;
See Also
How to Create a Messaging Application | Messaging Application Development for Windows Mobile-based Devices | Messaging | How to: Begin a MAPI Session | How to: Connect to a Message Store | How to: Send a Message | How to: End a MAPI Session | Messaging Sample Code
Send Feedback on this topic to the authors