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

标签 c++ c windows outlook

我正在寻找一种从 WAB(Windows 通讯簿)中提取所有联系人和通讯组列表(以及相关联系人)的方法。

我需要这样做,因为我需要在 roundcube 中导入地址簿,以及通讯组列表/组。

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

环顾 MSDN,我发现 iAddrBook 的 OpenEntry 方法应该在第三个参数中支持要打开的接口(interface),在我的例子中是 iDistList,但我找不到接口(interface) ID。

我搜索了一些关于 WAB 文件结构的文档,但一无所获。

有什么建议吗?

最佳答案

这是我用来完成这个的路径:

  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 以获取包含此分发列表内容的表。

最后一个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;
  }

关于c++ - 从 wab (mapi) 中提取联系人和分发列表(组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9404827/

相关文章:

c++ - 是否可以将 char[][] 传递给请求 char** 的函数?

c - 生成 1 和 0 并以菱形形式存储在数组内

c - 如何在 C 代码中动态更改/伪造 'file size'

python - 在给定的时间和分钟使用 crontab 时,周期性任务不起作用

Windows 10 - 小娜编程

c++ - 如何通过代码将页面插入Qt中的工具箱?

c++ - 如何使用 C++ 在 Active Directory 的属性中设置值?

c - 使用C的RPCGEN介绍-无法创建客户端

windows - 如何在 Windows 中使用 Go 将进程设置为 CPU?

c# - 在命名空间扩展中使用 OverlayIdentifiers 图标