无聊客的专栏

寻找逝去的岁月

原创 (原创)CE MAPI实例讲解 --- 如何设置收件人信息(五)收藏

新一篇: (原创)CE MAPI实例讲解 --- 如何获取收件人信息(六) | 旧一篇: 关于设置PPC壁纸 (by 无聊客)

       本来想继续谈谈AdviseSink,但是近来有些朋友问到关于收件人的问题,所以顺便先提一下这块。

       发件人和收件人是邮件和消息很常用的几个属性之一,关于发件人的设置和获取是很简单的,只需要处理PR_SENDER_EMAIL_ADDRESS属性即可,下面主要讲述的收件人的设置和获取。

       MAPI收件人结构如图(摘自MSDN):

      

 

       每一个Entry代表了一个收件人信息组,每个信息组又可以有多项信息组成,举个例子,下面的代码代表了一个收件人的信息:

       aEntries[0].rgPropVals[0].ulPropTag     = PR_RECIPIENT_TYPE;   //类型,MAPI_TO代表是设置到TO字段上的,相应的还有MAPI_CCMAPI_BCC

       aEntries[0].rgPropVals[0].Value.ul        = MAPI_TO;

 

       aEntries[0].rgPropVals[1].ulPropTag    = PR_ADDRTYPE;              //设置地址类型,一般为SMTP

       aEntries[0].rgPropVals[1].Value.LPSZ   = _T("SMTP");

 

       aEntries[0].rgPropVals[2].ulPropTag    = PR_EMAIL_ADDRESS;   //收件人地址

       aEntries[0].rgPropVals[2].Value.LPSZ = _T("1234567");

 

       设置收件人是通过IMessage:: ModifyRecipients来实现的,以下的代码举例说明了如何设置TOCCBCC属性:

       INT              nRecipientCount    = 3;        //表示有3个联系人信息

       INT               nListBufSize          = CbNewADRLIST(nRecipientCount);       //计算3个联系人需要的存储空间

       LPADRLIST   pAddressList         = NULL;

       MAPIAllocateBuffer(nListBufSize, (LPVOID FAR *)&pAddressList));            //分配空间
       memset(pAddressList, 0, nBufSize);           

 

       pAddressList->cEntries               = 3;        //表明一共有3个联系人信息

       //设置To

       INT nCurIndex     = 0;

       MAPIAllocateBuffer(sizeof(SPropValue) * 3, (LPVOID FAR *)&pAddressList->aEntries[nCurIndex].rgPropVals));      //分配空间       memset(pAddressList->aEntries[nCurIndex].rgPropVals, 0, sizeof(SPropValue) * 3);

       pAddressList->aEntries[nCurIndex].rgPropVals[0].ulPropTag           = PR_RECIPIENT_TYPE;

       pAddressList->aEntries[nCurIndex].rgPropVals[0].Value.ul               = MAPI_TO;               //表明是写到To

 

       pAddressList->aEntries[nCurIndex].rgPropVals[1].ulPropTag          = PR_ADDRTYPE;

       pAddressList->aEntries[nCurIndex].rgPropVals[1].Value.LPSZ = _T("SMTP");

 

       pAddressList->aEntries[nCurIndex].rgPropVals[2].ulPropTag           = PR_EMAIL_ADDRESS;

       pAddressList->aEntries[nCurIndex].rgPropVals[2].Value.LPSZ = _T("1234567");

 

       pAddressList->aEntries[nCurIndex].cValues = 3;        //表明改联系人有3个属性要设置

 

 

       //同上,现在设置CC

       nCurIndex            = 1;

       MAPIAllocateBuffer(sizeof(SPropValue) * 3, (LPVOID FAR *)&pAddressList->aEntries[nCurIndex].rgPropVals));      //分配空间       memset(pAddressList->aEntries[nCurIndex].rgPropVals, 0, sizeof(SPropValue) * 3);

       pAddressList->aEntries[nCurIndex].rgPropVals[0].ulPropTag           = PR_RECIPIENT_TYPE;

       pAddressList->aEntries[nCurIndex].rgPropVals[0].Value.ul               = MAPI_CC;               //表明是写到CC

 

       pAddressList->aEntries[nCurIndex].rgPropVals[1].ulPropTag          = PR_ADDRTYPE;

       pAddressList->aEntries[nCurIndex].rgPropVals[1].Value.LPSZ        = _T("SMTP");

 

       pAddressList->aEntries[nCurIndex].rgPropVals[2].ulPropTag           = PR_EMAIL_ADDRESS;

       pAddressList->aEntries[nCurIndex].rgPropVals[2].Value.LPSZ        = _T("7654321");

 

       pAddressList->aEntries[nCurIndex].cValues = 3;        //表明改联系人有3个属性要设置

 

 

       //同上,现在设置BCC

       nCurIndex            = 2;

       MAPIAllocateBuffer(sizeof(SPropValue) * 3, (LPVOID FAR *)&pAddressList->aEntries[nCurIndex].rgPropVals));      //分配空间       memset(pAddressList->aEntries[nCurIndex].rgPropVals, 0, sizeof(SPropValue) * 3);

       pAddressList->aEntries[nCurIndex].rgPropVals[0].ulPropTag           = PR_RECIPIENT_TYPE;

       pAddressList->aEntries[nCurIndex].rgPropVals[0].Value.ul               = MAPI_BCC;            //表明是写到CC

 

       pAddressList->aEntries[nCurIndex].rgPropVals[1].ulPropTag          = PR_ADDRTYPE;

       pAddressList->aEntries[nCurIndex].rgPropVals[1].Value.LPSZ         = _T("SMTP");

 

       pAddressList->aEntries[nCurIndex].rgPropVals[2].ulPropTag           = PR_EMAIL_ADDRESS;

       pAddressList->aEntries[nCurIndex].rgPropVals[2].Value.LPSZ         = _T("88888888");

 

       pAddressList->aEntries[nCurIndex].cValues = 3;        //表明改联系人有3个属性要设置

 

 

       //调用ModifyRecipients添加联系人,完了记的释放申请的内存pMsg为你想操作的Message的对象实例,关于如何获取可以参考以前的文章。       pMsg->ModifyRecipients(MODRECIP_ADD, pAddressList)

 

 

       for(INT i = 0; i < nRecipientCount; i++)

              MAPIFreeBuffer(pAddressList->aEntries[i].rgPropVals);

 

       MAPIFreeBuffer(pAddressList);

 

       OK,先讲完设置,以后有空将会继续讲解如何获取收件人信息。

 

      无聊客

   yzx0023@gmail.com

 

      

发表于 @ 2006年06月06日 21:42:00|评论(loading...)|编辑

新一篇: (原创)CE MAPI实例讲解 --- 如何获取收件人信息(六) | 旧一篇: 关于设置PPC壁纸 (by 无聊客)

评论

#你好 看了你的文章收益非浅啊 发表于2006-07-19 12:52:00  IP: 222.128.26.*
你好,按照你介绍的内容我,做了个demo,怎么发送中文时对方接到的是乱码 ,内容是引号里的“???”。
#浪客剑心 发表于2006-08-06 01:24:00  IP: 218.17.198.*
请问怎么获取短信收件人的电话号码?好像不是保存在PR_EMAIL_ADDRESS里面的
#浪客剑心 发表于2006-08-06 01:26:00  IP: 218.17.198.*
错了,是短消息发送人的电话号码,能否用这种方法得到?
#yzx0023 发表于2006-08-06 10:50:00  IP: 60.176.212.*
To 浪客剑心:可以的
#great_mountain 发表于2006-08-17 09:53:00  IP: 10.193.74.*
hi
我修改了 一下smaple里的 sendmail, 想 用在WM5.0上发送短信,但不知怎么回事总是发不出去.我修改了 地址为"14250010001", PR_MSG_STATUS改成了MSGSTATUS_RECTYPE_SMS; 还有没有什么地方需要修改的 呀 ?谢谢了
你有没有用MAPI发短信的SAMPLE ?如果方便的话发送一份给我吧. wang_0307@hotmail.com
#hehefox 发表于2007-01-11 18:31:07  IP: 211.157.41.*
无聊兄你好看了你的文章对我帮助真是很大。
我现在有一个问题。
我现在要自己做一个sms在outlook中
1。我做的短信无论是inbox还是sentbox,点击短信进入以后
发现没有from项,用outlook自己给自己发的短信我发现有
这是那个属性啊??
2。我发送和接收的sms都用PR_MESSAGE_DELIVERY_TIME来记录时间
但是我发现在sms list中(inbox or sentbox)中的时间也和outlook自己给自己发的不同,
所以我觉得时间属性有问题,但是我查了很多的时间属性都没有找到,可能不是 很仔细把
希望帮我看看。
#yzx0023 发表于2007-01-17 14:24:51  IP:
to hehefox:问题1:请检查你创建的Message的Message Class,是不是和SMS的一样。
问题2:不是很明白你的意思,在不同的BOX里面,OUTLOOK显示的时间含义应该是不一样的,比如sentbox是发出时间,inbox是收到时间
#amoica8 发表于2007-02-07 09:54:14  IP:
对你的文章很感兴趣,按照你说的进行了一些尝试,效果。现在有一个问题想请较一下:
我在短信的编辑菜单里添了一个扩展菜单,被调用时,已经能获得IMessage的指针,也能取得PR_SUBJECT,但无法更改正文的内容,比如我想在现有的内容后面加一些字,如何实现呢?谢谢
2007-02-07 22:02:28作者回复
你可以调用IMAPIProp::SetProps重新设置subject属性
#amoica8 发表于2007-02-08 08:27:08  IP:
我按照你说的做了,调用后返回S_OK,再取PR_SUBJECT属性时也是已经设置后的,但文字的内容并没有发生变化,这是怎么回事呢?是不是需要用某个函数“刷新”一下?
2007-02-08 08:42:43作者回复
文字的内容并没有发生变化?是指哪里的文字?就是打开message以后的?你可以先把tmail杀掉再起来,再去看这条message来确认一下结果。如果还不行,你需要确定SMS的内容是不是存在subject里面,我记的好象是的,但是很久没碰了,或许也有可能是PR_BODY
#mz52 发表于2008-04-08 17:12:33  IP: 222.212.80.*
你还在无聊吗?其实上网答题挣奖品还是很不错的.下面给大家推荐一个好的去处:http://www.pceggs.cn/pgComDefault.aspx?ID=6126680
希望大家能够一起分享拿奖品的喜悦,其实上网不在无聊~!~
#chendeke 发表于2008-08-28 10:04:22  IP: 202.106.154.*
amoica8 ,“对你的文章很感兴趣,按照你说的进行了一些尝试,效果。现在有一个问题想请较一下:
我在短信的编辑菜单里添了一个扩展菜单,被调用时,已经能获得IMessage的指针,也能取得PR_SUBJECT,但无法更改正文的内容,比如我想在现有的内容后面加一些字,如何实现呢?谢谢”
我现在想要实现的一个功能就是你说的这个,在短信的编辑菜单里加一个菜单项,通过点击这个菜单项就能获取当前短信的内容,这个问题困扰我好久了,太希望能得到你的帮助了,谢谢了,可能你看不到我发的这个帖子,没办法还是抱着试一试的想法发了,要是能有你的邮箱就好了,可以跟你联系了。我的QQ邮箱286617695@qq.com,也是我的QQ号码。
愿上帝保佑你能看到我的帖子给予我帮助。
2008-09-04 11:26:44作者回复
通过SetProps就可以了,我不是很理解你的问题
#chendeke 发表于2008-08-28 10:05:59  IP: 202.106.154.*
对不起,我不是有意的,我的网络慢,还以为没有发出去呢,所以多点了几下,没想到会这样,对不起。
发表评论  


登录
Csdn Blog version 3.1a
Copyright © 无聊客