65.9K
CodeProject 正在变化。 阅读更多。
Home

从 Outlook 导入联系人

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.74/5 (17投票s)

2003 年 2 月 21 日

viewsIcon

751246

downloadIcon

5767

示例源代码,使用 Office/Outlook 对象模型从 Outlook 导入项目。

Sample Image - maximum width is 600 pixels

引言

Outlook 已成为个人信息管理软件的事实标准。几乎每个人都使用此软件来管理他们的需求。因此,需要以编程方式操作 Outlook 中存储的信息。微软为此提供了 Outlook 对象模型。仔细查看 MSDN 上的示例,会发现几乎所有示例都是用 Visual Basic 编写的。那么(不太差劲的 ;-))C++ 程序员该怎么办呢?由于 Outlook 对象模型是一系列 COM 接口,任何符合 COM 标准的语言都可以使用它。此示例可以从 Outlook 中的任何联系人文件夹导入联系人。

要在 C++ 中使用 Office/Outlook 对象,需要导入以下文件...

//For Office XP
#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");
//For Office 2000 
#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");
//Code to import Contacts...

_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()) //default outlook contacts folder
  {
    pFolder=pApp->GetNamespace(_bstr_t("MAPI"))->
                    GetDefaultFolder(olFolderContacts);
    if (pFolder==NULL)
    {
      MessageBox("Could not find default contacts folder.",
                 "Outlook Error");
      return;
    }
    
  }
  else //display folder selection window
  {
    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());
}

此示例导入联系人信息,但稍作修改就可以导入 Outlook 中的任何其他信息。这包括约会项目、电子邮件消息、便笺、任务等。例如,要从日历文件夹导入约会项目,只需创建 _AppointmentItemPtr 智能指针类对象,而不是 _ContactItemPtr 对象即可。

© . All rights reserved.