请问在windows上怎么用mapi读出outlook及exchange server里的联系人

CoolHg 2008-03-27 01:43:46
如题所示,需要读出outlook及exchange server里的联系人,请注意是联系人(Contacts),不是通讯录(不知MS怎么弄的),就是有手机号、工作电话等等的那些内容,outlook右边默认的第三页里的内容,不知道需要使用到哪些接口,及如何调用这些接口,有知道的请及时告知,较急,谢谢!
...全文
220 6 打赏 收藏 举报
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
CoolHg 2008-03-31
刚才把所有address打印了一遍,应该能够读出来了,怪自己以前太懒,没有一一打印
  • 打赏
  • 举报
回复
CoolHg 2008-03-28
使用outlook总有些不好的地方,比如打开联系人的时候,会弹出一个提示框说正在访问通讯录,需要确认,会给用户一些不便。弄不清mapi里有什么方法可以实现GetDefaultFolder这样的功能,msdn里写的接口很详细,但是使用讲的很少,有也是很含糊,真是郁闷死了
  • 打赏
  • 举报
回复
jameshooo 2008-03-28
使用automation产生的Application是不受信任的,如果要受信任(不弹出提示框),你可以做outlook的插件,在OnConnection里传给插件的Application是受信的,但插件的运行是被动的,必须跟随outlook启动,你可以在你的exe文件里启动outlook但不做任何别的事情,访问联系人的事情交给插件去做,这样能绕开信息提示,而且无需使用MAPI
  • 打赏
  • 举报
回复
jameshooo 2008-03-27
可能是用法不对,outlook内部也是基于MAPI进行封装的。不过有封装的东西为什么不用?用MAPI稍嫌复杂。
首先从Application::GetNamespace("MAPI")获得命名空间,再从_NameSpace::GetDefaultFolder(olFolderContacts)获得联系人文件夹MAPIFolder,MAPIFolder有一个StoreID属性,得到这个属性的值就好办了,下面的事情就是mapi32.dll的事情了:
MAPIInitialize(NULL);
IMAPISession* pMapiSession;
MAPILogonEx(NULL, NULL, NULL, NULL, &spMapiSession);
IMsgStore* pMsgStore;
pMapiSession->OpenMsgStore(NULL, cb, entryid, NULL, MAPI_BEST_ACCESS|MDB_NO_DIALOG, &pMsgStore); // cb和entryid是从上面的StoreID转换来的,稍后解释
有了IMsgStore,你可以进入MAPI的世界了。

由于MAPI里面的每个对象都有一个全局唯一的ENTRYID,但是这个ENTRYID是一个长度不定的二进制数据,而outlook中得到的StoreID是一个字符串,这就涉及到转换的问题,转换其实很简单(是我自己摸索出来的,我的功劳大大滴),ENTRYID的二进制字节流的每个字节都用16进制的方式变成2字节的字符,比如某个字节的值是0xa3,转换成串就是"a3",这下知道反过来怎么转换了吧,可以自己写一个转换函数,也能用mapi32.dll提供的FBinFromHex转换函数转换,但是这个函数微软已经说了可能未来不受支持,自己写一个也很简单。
  • 打赏
  • 举报
回复
CoolHg 2008-03-27
outlook的基本知道方法了,现在就是想用mapi来实现,outlookapp里有一个GetDefaultFolder(olFolderContacts),不知道mapi里是否有相应的接口来实现此方法,mpai里的GetPAB得到的ABContainer查询不到内容
  • 打赏
  • 举报
回复
jameshooo 2008-03-27
outlook automation,得到Application接口,再访问outlook中的对象模型。
  • 打赏
  • 举报
回复
发帖
VC/MFC
加入

1.6w+

社区成员

VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
申请成为版主
帖子事件
创建了帖子
2008-03-27 01:43
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……