如何: 保存到文件的邮件附件
来源:互联网 发布:拉菲尔定律工资计算法 编辑:程序博客网 时间:2024/06/05 12:49
如何: 保存到文件的邮件附件
文章编号: 173353 - 查看本文应用于的产品
查看机器翻译免责声明
Microsoft 支持页面的机器翻译
本页
概要
下面的代码示例演示如何打开附件,并将内容复制到当前目录中的文件。
回到顶端 | 提供反馈
更多信息
使用以下步骤来打开附件,并将内容复制到当前目录中的文件:
注意: 如果消息或结构化的存储 (OLE 对象),该附件,没有 PR_ATTACH_DATA_BIN 属性。另一个附件的属性,PR_ATTACH_METHOD,实质上是可以包含四个不同的值来告诉您要执行的操作:
- 打开 (Attachments) 表格,其中包括以下列:
PR_ATTACH_FILENAME 和 PR_ATTACH_NUM。 - 在附件表中打开的附件。
- 创建一个文件附件。
- 将复制到新创建的文件附件的内容。
示例代码
/* This code assumes that you already have an IMessage object, pointed to by the variable pMsg. This IMessage object should have been opened with the MAPI_MODIFY flag. This code also assumes that PR_ATTACH_METHOD equals ATTACH_BY_VALUE. See the note that follows this sample code for more information. */ /* You should have the following define and include lines for this code to compile and link correctly: #define USES_IID_IMAPITable #define INITGUID #include <initguid.h> #include <mapiutil.h> */ HRESULT WriteAttachToFile ( LPMESSAGE pMsg ) { SizedSPropTagArray(1,g_sptMsgProps) = {1, PR_HASATTACH}; LPSPropValue pProps = NULL; HRESULT hRes = 0; ULONG cVals = 0; if (FAILED(hRes = pMsg->GetProps((LPSPropTagArray) &g_sptMsgProps, 0, &cVals, &pProps))) goto Quit; else hRes = S_OK; if (PR_HASATTACH == pProps[0].ulPropTag && pProps[0].Value.b) { LPMAPITABLE pAttTbl = NULL; LPSRowSet pRows = NULL; static SizedSPropTagArray(2,sptCols) = {2,PR_ATTACH_LONG_FILENAME, PR_ATTACH_NUM}; if (SUCCEEDED(hRes = pMsg -> OpenProperty(PR_MESSAGE_ATTACHMENTS, &IID_IMAPITable, 0, 0, (LPUNKNOWN *) &pAttTbl))) { if (SUCCEEDED(hRes = pAttTbl -> SetColumns( (LPSPropTagArray) &sptCols, TBL_BATCH))) { if (SUCCEEDED(hRes = HrQueryAllRows(pAttTbl, (LPSPropTagArray) &sptCols, NULL, NULL, 0, &pRows))) { for (ULONG i = 0; i < pRows -> cRows; i++) { LPATTACH lpAttach = NULL; // Verify we received a filename from GetProps if (! PR_ATTACH_FILENAME == pRows->aRow[i].lpProps[0].ulPropTag) break; // Verify we received an Attachment Index from GetProps if (! PR_ATTACH_NUM == pRows->aRow[i].lpProps[1].ulPropTag) break; // Open the attachment if (SUCCEEDED(hRes = pMsg->OpenAttach ( pRows->aRow[i].lpProps[1].Value.l, NULL, MAPI_BEST_ACCESS, &lpAttach))) { LPSTREAM pStrmSrc = NULL, pStrmDest = NULL; STATSTG StatInfo; // Open the property of the attachment // containing the file data if (FAILED(hRes = lpAttach->OpenProperty( PR_ATTACH_DATA_BIN, (LPIID)&IID_IStream, 0, MAPI_MODIFY, (LPUNKNOWN *)&pStrmSrc))) break; // Open an IStream interface and create the file at the // same time. This code will create the file in the // current directory. if (FAILED(hRes = OpenStreamOnFile( MAPIAllocateBuffer, MAPIFreeBuffer, STGM_CREATE | STGM_READWRITE, pRows->aRow[i].lpProps[0].Value.lpszA, NULL, &pStrmDest))) break; pStrmSrc -> Stat(&StatInfo, STATFLAG_NONAME); hRes = pStrmSrc -> CopyTo(pStrmDest, StatInfo.cbSize, NULL, NULL); // Commit changes to new stream pStrmDest -> Commit(0); // Release each of our streams pStrmDest -> Release(); pStrmSrc -> Release(); } // Release the attachment lpAttach -> Release(); } } } } FreeProws(pRows); if (pAttTbl) pAttTbl -> Release(); } Quit: MAPIFreeBuffer((LPVOID) pProps); return hRes; }
- ATTACH_BY_VALUE 意味着使用 PR_ATTACH_DATA_BIN 属性。
- ATTACH_BY_REFERENCE 意味着使用 PR_ATTACH_PATHNAME ;该文件不是实际包含的。
- 在 PR_ATTACH_DATA_OBJ,这将使您返回IMessage或IStorage接口分别调用OpenProperty的 ATTACH_EMBEDDED_MESSAGE 或 ATTACH_OLE 的平均值。
- 如何: 保存到文件的邮件附件
- 如何安全的保存数据到文件
- 微信中接收的word文件如何保存到电脑
- 如何把X264输出的INFO信息保存到文件
- 如何从服务端下载的文件保存到SD卡
- cocos2dx 如何把文件保存到本地
- 如何实现web应用下载文件时不弹出文件保存对话框,而是直接保存到指定的文件中
- 如何找到在OE中编辑的邮件附件
- 如何将linux 命令的执行结果在屏幕输出的同时保存到文件
- Linux下如何将命令行的结果保存到一个单独的文件
- 如何在关闭应用程序时自动保存文档到指定名称的文件
- 如何将DOS下执行命令的结果信息保存到一个文件
- PCL点云库中如何读取指定的PCD文件,重新命名,处理后保存到指定文件夹
- 如何应对SparkSQL DataFrame保存到hdfs时出现的过多小文件问题
- 从面向对象的角度看,仿真该如何把数据保存到文件?
- Android如何保存文件到sd卡,及期间遇到的各种问题
- 如何应对SparkSQL DataFrame保存到hdfs时出现的过多小文件问题
- 如何将文本框里面的内容保存到txt文件中
- SQL中的INNER JOIN和JOIN有什么区别
- android 读取assets下的文件
- Oracle基本SQL语句
- 无限极分类php实现—查子孙树、家谱树
- 安卓本地播放器的实现一
- 如何: 保存到文件的邮件附件
- Console命令详解,让调试js代码变得更简单
- error while loading shared libraries: xxx.so.x"错误的原因和解决办法
- 服务器、post和get、表单提交案例
- eclipse下无法连接到github的解决办法
- 文笔又不好,学艺又不精,管他呢,随便开始吧。
- PowerShell 将对象转换成文本
- php C++ 扩展
- CUDA5.0+VS2008+VisualAssist安装以及配置