从wab中提取联系人和分发列表(组)(mapi)

时间:2012-02-22 23:21:00

标签: c++ c windows outlook

我正在寻找从WAB(Windows地址簿)中提取所有联系人和分发列表(以及相关联系人)的方法。

我需要这样做,因为我需要在圆形立方体中导入带有通讯组列表/组的地址簿。

经过一些研究,我在Code Project(http://www.codeproject.com/Articles/3407/Accessing-the-Windows-Address-Book)上创建了一个C ++项目,但这个支持只是联系。

环顾MSDN我已经发现iAddrBook的OpenEntry方法应该在第三个参数中支持打开的接口,在我的情况下是iDistList,但我找不到任何接口id。

我搜索了一些文档,删除了WAB文件结构,但没有。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

以下是我用来实现此目的的路径:

  1. 我使用wab32 dll的WABOpen方法获取LPADRBOOK lpAddr;
  2. 我设置PAB文件夹lpAddr:调用lpAddr-> GetPAB(),OpenEntry获取容器,然后在容器上使用GetContentsTable获取LPMAPITABLE lpTable。
  3. 要获取表元素计数,请在lpTable上使用GetRowCount
  4. 要验证给定的表行是否为通讯组列表,请使用QueryRows,这应返回MAPI_DISTLIST或MAPI_MAILUSER。
  5. 如果这是一个MAPI_DISTLIST行,则使用其PR_ENTRYID来调用lpAdrBook-> OpenEntry(),这应该返回IABContainer容器,在该容器上调用GetContentsTable以获取包含此分发列表内容的表。
  6. 最后一个OpenEntry如下所示,我没有在任何地方设置第三个参数:

      // Now emails will be loaded.
      ULONG ulObjType;
      IUnknown* lpUnk;
      hr = lpAdrBook->OpenEntry(DistEntryId.size, (LPENTRYID)DistEntryId.ab, NULL, 0,   &ulObjType, &lpUnk );
      if (FAILED(hr)) {
       assert(false); return hr;
      }