CE MAPI实例讲解 --- 设置Message附件(七)
来源:互联网 发布:淘宝不能代付怎么办 编辑:程序博客网 时间:2024/05/17 01:22
1) 准备工作,在Temp目录下先放上几张图片,在这个例子里面,我在Temp目录放两张JPG图片,1.jpg,2.jpg,我将把这两张图片放到一个Message里面,生成两个附件。
2) 在Outlook草稿箱里面创建出一条新的Message。
3) 为Message添加附件。
如何在Outlook草稿箱里面创建一条新的Message,我想通过前面的文章已经解释清楚了,这里就不罗嗦了,以下假设我们已经获取了IMessage*对象指针。首先提出一个帮助函数:MAPIHelp_AddAttachment,该函数作用是为指定的Message添加指定文件作为附件,定义如下:
BOOL MAPIHelp_AddAttachment( IMessage* pMsg, LPCTSTR szFilePath, LPCTSTR szFileName );
pMsg : Message目标对象指针
szFilePath : 需要作为附件添加的文件全路径
szFileName : 需要作为附件添加的文件名称,作为附件的名称
以下是函数具体实现:
BOOL MAPIHelp_AddAttachment( IMessage* pMsg, LPCTSTR szFilePath, LPCTSTR szFileName )
{
if( NULL == pMsg || NULL == szFilePath )
return FALSE;
BOOL bRet = FALSE;
ULONG ulAttachNum = 0;
LPATTACH pAttach = NULL;
IStream* pStream = NULL;
HANDLE hFile = NULL;
SPropValue rgpropsTo[1] = {0};
DWORD dwChunkSize = 4096;
DWORD dwSizeRead = 0;
//预备BUFFER,用来读写文件内容
LPBYTE pData = new BYTE[dwChunkSize];
if( NULL == pData )
return FALSE;
//创建附件,返回IAttach对象,每个IAttach对象对应于一个附件, ulAttachNum是这个对象的标识,我们可以通过IMessage:: OpenAttach时传入这个ID来读取这个附件,具体的方法会在下篇时介绍。
if( FAILED(pMsg->CreateAttach( NULL, NULL, &ulAttachNum, &pAttach )) )
goto Exit;
//设置附件名称
rgpropsTo[0].ulPropTag = PR_ATTACH_FILENAME;
rgpropsTo[0].Value.lpszW = (LPTSTR)szFileName;
if( FAILED(pAttach->SetProps(1, rgpropsTo, NULL)) )
goto Exit;
//通过OpenProperty获取IStream对象,有了IStream对象,我们就可以读写数据。对于IAttach:: OpenProperty,CE上只支持PR_ATTACH_DATA_BIN属性。
if( FAILED(pAttach->OpenProperty( PR_ATTACH_DATA_BIN, NULL, NULL, MAPI_MODIFY, (LPUNKNOWN *)&pStream )) )
goto Exit;
//下面部分是文件读写部分,从原始文件里读出数据,再写到附件里面去
hFile = ::CreateFile( szFilePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
if( INVALID_HANDLE_VALUE == hFile )
goto Exit;
while( ReadFile( hFile, pData, dwChunkSize, &dwSizeRead, NULL ) )
{
if( 0 >= dwSizeRead )
break;
pStream->Write( pData, dwSizeRead, &dwSizeRead );
}
bRet = TRUE;
Exit:
//完毕以后记的释放获取的对象。
RELEASE_OBJ(pStream);
RELEASE_OBJ(pAttach);
DELETE_OBJ(pData);
if( INVALID_HANDLE_VALUE != hFile )
::CloseHandle( hFile );
return bRet;
}
有了上面的帮助函数,当我们想为一条Message添加附件时,可以按照如下调用:
MAPIHelp_AddAttachment( pMsg, _T("//Temp//1.jpg"), _T("1.jpg") );
MAPIHelp_AddAttachment( pMsg, _T("//Temp//2.jpg"), _T("2.jpg") );
……
完毕,惯例,欢迎大家拍砖。
- CE MAPI实例讲解 --- 设置Message附件(七)
- CE MAPI实例讲解 --- 读取Message附件(八)
- CE MAPI实例讲解 --- 如何设置收件人信息(五)
- CE MAPI实例讲解
- CE MAPI实例讲解 --- 监视Message的状态改变
- CE MAPI实例讲解 --- 监视Message的状态改变(三)
- CE MAPI实例讲解(2)
- CE MAPI实例讲解(3)
- CE MAPI实例讲解(4)
- CE MAPI实例讲解(5)
- CE MAPI实例讲解(6)
- CE MAPI实例讲解(7)
- CE MAPI实例讲解(8)
- CE MAPI实例讲解(9)
- CE MAPI实例讲解 --- IMAPIAdviseSink的一个例子(四)
- CE MAPI实例讲解 --- 如何获取收件人信息(六)
- CE MAPI实例讲解 --- Custom Form介绍(九)
- CE MAPI实例讲解 --- 如何获取Inbox里的所有消息(一)
- 一道算法题
- CE MAPI实例讲解 --- 如何获取收件人信息(六)
- 不再为频繁的QueryString解析而苦恼
- 玩一把试试
- ActiveBar+ActiveSizer
- CE MAPI实例讲解 --- 设置Message附件(七)
- CE MAPI实例讲解 --- 读取Message附件(八)
- 递归列举从数组b()中选出某些元素(允许重复)使其和等于num的所有组合
- CE MAPI实例讲解 --- Custom Form介绍(九)
- 10个最吃香的网站开发技术
- 单件模式(Singleton Pattern)
- 美国人的生活
- 国外优秀网站收藏(转)
- 【听大师说话4】PHP创始人 Rasmus Lerdorf 访谈 2