Introduction
Outlook has become a de-facto standard in Personal Information Management
software. Almost everyone uses this software for managing their needs. There
arises the need for programmatically manipulating information stored in Outlook.
Microsoft has provided the Outlook Object Model for this very same purpose. A
closer look at the samples on MSDN reveals that almost all samples are in Visual
Basic. What should the (not so poor ;-)) C++ programmer do for this? Since the
Outlook Object Model is a collection of COM interfaces, any COM compliant
language can useit. This sample can import contacts from any contacts folder in
Outlook.
To use Office/Outlook Objects in C++, following files needs to be imported...
#import "E:\Program Files\Common Files\Microsoft Shared\Office10\mso.dll" named_guids
#import "E:\Microsoft Office\Office10\MSOUTL.OLB" \ no_namespace
exclude("_IRecipientControl", "_DRecipientControl");
#import "E:\Program Files\Common Files\Microsoft Shared\Office10\mso.dll" named_guids
#import "E:\Microsoft Office\Office10\MSOUTL.OLB" \ no_namespace
exclude("_IRecipientControl", "_DRecipientControl");
_ApplicationPtr pApp;
_ItemsPtr pItems;
MAPIFolderPtr pFolder;
_ContactItemPtr pContact;
HRESULT hr;
try
{
hr=pApp.CreateInstance(__uuidof(Application));
if (FAILED(hr))
{
MessageBox("Unable to instantiate Outlook.",
"Outlook Error",MB_OK);
return;
}
if (m_Option.GetCheck())
{
pFolder=pApp->GetNamespace(_bstr_t("MAPI"))->
GetDefaultFolder(olFolderContacts);
if (pFolder==NULL)
{
MessageBox("Could not find default contacts folder.",
"Outlook Error");
return;
}
}
else
{
pFolder=pApp->GetNamespace(_bstr_t("MAPI"))->PickFolder();
if (pFolder==NULL)
return;
if (pFolder->GetDefaultItemType()!=olContactItem)
{
MessageBox("Select folder is not a Contact folder.",
"Outlook Contacts");
return;
}
}
pItems=pFolder->GetItems();
if (pItems==NULL)
{
MessageBox("Unabel to get Contact Items.",
"Outlook Error");
return;
}
pContact=pItems->GetFirst();
m_ContactList.ResetContent();
while(1)
{
if (pContact==NULL)
break;
CString strTemp;
strTemp=(char *)pContact->GetFullName();
strTemp=strTemp + "<";
strTemp=strTemp + (char *)pContact->GetEmail1Address();
strTemp=strTemp + ">";
m_ContactList.AddString(strTemp);
pContact=pItems->GetNext();
}
}
catch(_com_error &e)
{
MessageBox((char *)e.Description());
}
This sample imports contact information but a slight modification will
enable this to import any other information from Outlook as well. This includes
Appointment Items, Email Messages, Notes, Tasks, and more. For example, to import Appointment Items from a Calendar folder one just needs to make
an object of _AppointmentItemPtr smart pointer class instead of _ContactItemPtr.