ID: Q180232
The information in this article applies to:
From time to time you may need to create, move, or rename a folder programmatically. This is done primarily through the IMAPIFolder and the IMAPIProp interfaces. The code example below walks you through the process of creating, moving, and renaming a folder.
1. Create a MAPI Session.
2. Get a pointer to the message store.
NOTE: While the example below uses the private information store, the
same logic and code can be used against the public information store.
3. Create, move, or rename a folder.
4. Log off and Release the session.
1. Create a pointer to the parent of the new folder. For example, if the
new folder should be a subfolder to the mailbox, create a pointer to the
top of the information store. If the new folder should be a subfolder of
the Inbox, create a pointer to the Inbox.
2. Using the IMAPIFolder::CreateFolder, add the folder to the folder
hierarchy.
1. Create a pointer to the folder that becomes the new parent of the folder
being moved.
2. Using HrMAPIFindFolderEx(), retrieve the count of bytes and entry id of
the folder you wish to move.
3. IMAPIFolder::CopyFolder with the entry id and count of bytes returned in
the step above and FOLDER_MOVE in the ulFlags parameter moves the
folder.
1. Using HrMAPIFindFolderEx(), retrieve the count of bytes and entry id of
the folder you wish to rename.
2. Open the folder so that the properties of the folder can be changed.
3. Use HrSetOneProp() to change the PR_DISPLAY_NAME of the folder.
The code example below demonstrates these three actions:
The additional library files required to compile the code are:
/********************** Begin Code Example **************** /
#include <Windows.h>
#include <edk.h>
#include <stdio.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR pszCmd,
int nCmdShow)
{
ULONG cbEIDStore = 0;
LPENTRYID lpEIDStore = NULL;
ULONG cbEIDFolder = 0;
LPENTRYID lpEIDFolder = NULL;
LPMAPISESSION lpSession = NULL;
LPMDB lpStore = NULL;
LPMAPIFOLDER lpFolder = NULL;
LPMAPIFOLDER lpNewFolder = NULL;
LPMAPIFOLDER lpDestFolder = NULL;
HRESULT hr = NULL;
ULONG ulUIParam = 0;
SPropValue spvMsg;
LPCIID lpInterface = NULL;
ULONG ulFlags = MAPI_BEST_ACCESS;
ULONG ulObjType = 0;
hr = MAPIInitialize(NULL);
if (FAILED(hr))
{
MessageBox(NULL,"MAPIInitialize failed",NULL,MB_OK);
return 1;
}
hr = MAPILogonEx(0, "", NULL,
MAPI_LOGON_UI | MAPI_NEW_SESSION | MAPI_EXTENDED |
MAPI_NO_MAIL ,
&lpSession);
if (FAILED(hr))
{
MessageBox(NULL,"MAPI Logon failed",NULL,MB_OK);
goto cleanup;
}
hr = HrMAPIFindDefaultMsgStore(lpSession, &cbEIDStore, &lpEIDStore);
if (FAILED(hr))
{
MessageBox(NULL,"Message Store Not Found",NULL,MB_OK);
goto cleanup;
}
hr = lpSession->OpenMsgStore(ulUIParam, cbEIDStore,
lpEIDStore, lpInterface,
ulFlags, &lpStore);
if (FAILED(hr))
{
MessageBox(NULL,"Message Store Not Opened",NULL,MB_OK);
goto cleanup;
}
hr = HrMAPIOpenFolderEx(lpStore, '\\',
"\\Top of Information Store\\Inbox",
&lpFolder);
if (FAILED(hr))
{
MessageBox(NULL,"Folder Not Opened",NULL,MB_OK);
goto cleanup;
}
// Creates new folder under the Inbox.
hr = lpFolder->CreateFolder(FOLDER_GENERIC, "Created Folder",
"Folder Comment", NULL,
OPEN_IF_EXISTS,
&lpNewFolder);
if (FAILED(hr))
{
MessageBox(NULL,"Folder Not Created",NULL,MB_OK);
goto cleanup;
}
// Moves the folder to the main folder tree.
hr = HrMAPIOpenFolderEx(lpStore, '\\',
"\\Top of Information Store",
&lpDestFolder);
if (FAILED(hr))
{
MessageBox(NULL,
"Top of Information Store Not Opened",NULL,MB_OK);
goto cleanup;
}
hr = HrMAPIFindFolderEx(lpStore, '\\',
"\\Top of Information Store\\Inbox\\Created Folder",
&cbEIDFolder,
&lpEIDFolder);
if (FAILED(hr))
{
MessageBox(NULL,"Folder Not Found",NULL,MB_OK);
goto cleanup;
}
hr = lpFolder->CopyFolder( cbEIDFolder, lpEIDFolder, NULL,
lpDestFolder, NULL,
NULL,
NULL,
FOLDER_MOVE | COPY_SUBFOLDERS);
// Finds folder so that it can be opened and renamed.
hr = HrMAPIFindFolderEx(lpStore, '\\',
"\\Top of Information Store\\Created Folder",
&cbEIDFolder, &lpEIDFolder);
if (FAILED(hr))
{
MessageBox(NULL,"Folder Not Found",NULL,MB_OK);
goto cleanup;
}
hr = lpStore->OpenEntry(cbEIDFolder, lpEIDFolder,
NULL, MAPI_BEST_ACCESS,
&ulObjType,
(LPUNKNOWN FAR *)&lpFolder);
if (FAILED(hr))
{
MessageBox(NULL,"Folder Could Not Be Opened",NULL,MB_OK);
goto cleanup;
}
spvMsg.ulPropTag = PR_DISPLAY_NAME;
spvMsg.Value.lpszA = "Renamed Folder";
hr = HrSetOneProp(lpFolder, &spvMsg);
if (FAILED(hr))
{
MessageBox(NULL,"Folder Could Not Be Renamed",NULL,MB_OK);
goto cleanup;
}
cleanup:
if (lpSession)
{
lpSession->Logoff(0, 0, 0);
ULRELEASE(lpSession);
}
MAPIUninitialize();
return 0;
}
Keywords : kbMsg kbMAPI100
Version : WINDOWS:1.0
Platform : WINDOWS
Issue type : kbhowto
Last Reviewed: February 5, 1998