导入outlook联系人

这篇博客讨论了如何从Outlook中导入联系人,包括读取Outlook分组中的联系人。通过提供的代码示例,展示了使用MAPI接口来访问和获取Outlook联系人信息的方法,但指出在处理分组联系人时存在一些问题。
摘要由CSDN通过智能技术生成

楼主platinum15(心碎便便)2005-08-17 14:58:09 在 VC/MFC / 基础类 提问

如何导入outlook联系人?   
  现在可以导入outlook联系人,但是outlook分组中的联系人读不出来,并且分组后面建立的所有联系人读不出来!   
  即没有分组的时候都可以读出来!   
  问题:如何读出outlook中,各个分组的联系人! 问题点数:100、回复次数:11Top

1 楼goodboyws(深夜不眠者(VCMVP))回复于 2005-08-17 16:18:18 得分 10

http://www.vckbase.net/document/viewdoc/?id=660Top

2 楼platinum15(心碎便便)回复于 2005-08-17 17:59:57 得分 0

这个好像就也是读不出分组中的联系人Top

3 楼vcmute(BCare4 H1Rest Good9!)回复于 2005-08-17 18:19:25 得分 20

An   excellant   post   in   codeguru.   
  Import   address   book   from   OE   
  Some   of   this   code   is   EXTREMELY   complicated   to   say   the   very   least.   Good   luck.   
  You   will   need   to   include:   
  #include   "mapix.h"   
  #include   "addrlkup.h"   
  First   call   the   GETMSExchangeUSers()   function   seen   below:   
  void   CMAPITestDlg::GetMSExchangeUsers(CStringList   &NameList)   
  {   
  CString   cst;   
  HRESULT   hr   =   ::MAPIInitialize(NULL);   
  ASSERT(S_OK   ==   hr);   
  LPMAPISESSION   pSession   =   NULL;   
  hr   =   ::MAPILogonEx(0,   NULL,   NULL,   MAPI_LOGON_UI   |   MAPI_ALLOW_OTHERS   |   MAPI_EXTENDED,   &pSession);   
  ASSERT(SUCCEEDED(hr));   
  LPADRBOOK   lpAdrBook   =   NULL;   
  hr   =   pSession->OpenAddressBook(0,   0,   MAPI_ACCESS_MODIFY,   &lpAdrBook);   
  ASSERT(SUCCEEDED(hr));   
  ULONG   cbeid   =   0;   
  LPENTRYID   peid   =   NULL;   
  hr   =   HrFindExchangeGlobalAddressList(lpAdrBook,   &cbeid,   &peid);   
  if   (SUCCEEDED(hr))   
  {   
  ULONG   openFlags   =   MAPI_BEST_ACCESS;   
  hr   =   lpAdrBook->OpenEntry(cbeid,   peid,   NULL,   openFlags,   &ulObjType,   (LPUNKNOWN   *)&dlpPABEntry);   
  if   (hr   ==S_OK)   
  {   
  SizedSPropTagArray(2,   sptStoTbl)   =   {2,   {PR_DISPLAY_NAME,   PR_EMS_AB_PROXY_ADDRESSES}};   
  if   (HR_SUCCEEDED(((LPABCONT)dlpPABEntry)->GetContentsTable(0L,   &lppabcont)))   
  {   
  if   (HR_SUCCEEDED(lppabcont->SetColumns((LPSPropTagArray)&sptStoTbl,   TBL_BATCH)))   
  {   
  hr   =   ((LPMAPITABLE)lppabcont)->GetRowCount(0,   &lpulCount);   
  int   x   =   0;   
  int   iTotNum   =   lpulCount;   
  int   num_iterations   =   (lpulCount   /   50);   
  int   num_left   =   (lpulCount   -   (num_iterations   *   50));   
  m_Count   =   lpulCount;   
  while   (x   <   num_iterations)   
  {   
  if   (HR_SUCCEEDED(((LPMAPITABLE)lppabcont)->QueryRows((LONG)lpulCount,   0,   &lprws)))   
  {   
  for   (int   i   =   0;   i   <   (int)(*lprws).cRows;   i++)   
  {   
  CString   stro,   addr,   ListElement;   
  stro.Format("%s",   lprws->aRow.lpProps[0].Value.lpszA);   
  ListElement   =   stro;   
  if   (IsItValid(stro)   ==   1)   
  {   
  ++cntr;   
  ++m_MostRecentCount;   
  cst.Format("%d",   cntr);   
  NameList.AddTail(ListElement);   
  CString   ice;   
  ice.Format("%d   of   %d",   cntr,   iTotNum);   
  SetDlgItemText(IDC_NUM,   ice);   
  }   
  }   
  }   
  ++x;   
  }   
  if   (HR_SUCCEEDED(((LPMAPITABLE)lppabcont)->QueryRows((LONG)lpulCount,   0,   &lprws)))   
  {   
  for   (int   i   =   0;   i   <   num_left;   i++)   
  {   
  CString   stro,   addr,   ListElement;   
  stro.Format("%s",   lprws->aRow.lpProps[0].Value.lpszA);   
  ListElement   =   stro;   
  if   (IsItValid(stro)   ==   1)   
  {   
  ++cntr;   
  ++m_MostRecentCount;   
  cst.Format("%d",   cntr);   
  NameList.AddTail(ListElement);   
  }   
  }   
  }   
  }   
  }   
  }   
  }   
  else   
  {   
  AfxMessageBox("Error...");   
  }   
  if   (peid)   
  {   
  ::MAPIFreeBuffer(peid);   
  }   
  if   (lpAdrBook)   
  {   
  lpAdrBook->Release();   
  }   
  ::MAPIUninitialize();   
  }Top

4 楼platinum15(心碎便便)回复于 2005-08-17 20:05:24 得分 0

vcmute(横秋)   (   )       好多变量没声名,msdn都没找到这些方法!   
  能不能把链接贴给我Top

5 楼goodboyws(深夜不眠者(VCMVP))回复于 2005-08-18 01:11:25 得分 65

http://www.vckbase.net/document/viewdoc/?id=660的例子进行如下修改可以达到你的要求   
  我的outlook是2003   
  #import   "C:\Program   Files\Common   Files\Microsoft   Shared\OFFICE11\mso.dll"   named_guids   
  #import   "C:\Program   Files\Microsoft   Office\OFFICE11\MSOUTL.olb"   \   
  no_namespace   exclude("_IRecipientControl",   "_DRecipientControl")   
  ......   
        _ApplicationPtr   pApp;   
    
  HRESULT   hr;   
    
  m_ListEmail.ResetContent();   
  try   
  {   
  hr=pApp.CreateInstance(__uuidof(Application));   
  if   (FAILED(hr))   
  {   
  AfxMessageBox("Outlook实例创建失败");   
  return   1;   
  }   
    
  //   获取默认Outlook中联系人文件夹   
    
  MAPIFolderPtr   pFolder   =   pApp->GetNamespace(_bstr_t("MAPI"))->GetDefaultFolder(olFolderContacts);   
  _FoldersPtr   pFolders;   
  while   (pFolder)   
  {   
  _ItemsPtr   pItems;   
  _ContactItemPtr   pContact;   
  pItems=pFolder->GetItems();   
  if   (pItems==NULL)   
  {   
  AfxMessageBox("不能得到联系人条目");   
  return   1;   
  }   
    
  pContact=pItems->GetFirst();   
    
    
  while(pContact)   
  {   
  CString   strTemp;   
  strTemp=(char   *)pContact->GetFullName();   
  strTemp=strTemp   +   "<";   
  strTemp=strTemp   +   (char   *)pContact->GetEmail1Address();   
  strTemp=strTemp   +   ">";   
  m_ListEmail.AddString(strTemp);   
    
  pContact=pItems->GetNext();   
  }   
  pFolders   =   pFolder->GetFolders();   
  if   (pFolders)   
  pFolder   =   pFolders->GetFirst();   
  }   
  }   
  catch(_com_error   &e)   
  {   
  AfxMessageBox((char   *)e.Description());   
  }   
  ......   
  I   don't   know   why     似乎GetFolders是取下一个Top

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值