不能保存OLE类型的附件

本文关键字:类型 保存 OLE 不能 | 更新日期: 2023-09-27 17:49:27

我有一个c#程序将Outlook邮箱中未读电子邮件的附件保存到一个文件夹中,下面一行代码中断(第一行)的附件类型是OLE类型,错误是"Outlook无法对这种类型的附件执行此操作"(其中'它'是MailItem类型)。

string attachedfilename = it.Attachments[i].FileName;
it.Attachments[i].SaveAsFile("C:''temp''"+attachedfilename);

我读过关于使用http://www.dimastr.com/redemption/RDOMail.htm(库)来克服Ole类型附件的这个问题的文章,但是除了这个选项之外,我可以使用任何其他。net库来克服这个问题吗?
如果是,请在c#中分享代码片段。

不能保存OLE类型的附件

您需要调用IAttach::OpenProperty(PR_ATTACH_DATA_OBJ, IID_IStorage, ...),然后从IStorage打开包含您所追求的数据的特定流。请注意,流及其格式特定于创建OLE附件的应用程序。IAttach::OpenProperty仅在扩展MAPI (c++或Delphi)中可用,您不能在c#中这样做。当你调用RDOAttachment.SaveAsFile时,Redemption(我是它的作者)支持Word Pad, Paint Brush, Excel, Power Point, Word, Open Office, Acrobat, bitmap, metafile等格式。

要查看Outlook中存储的数据,请查看OutlookSpy附件(我也是其作者):选择消息,单击IMessage按钮,转到GetAttachmentTable选项卡,双击附件,右键单击PR_ATTACH_DATA_OBJ属性,选择IMAPIProp::OpenProperty,选择IStorage接口。

传递给Attachment类的SaveAsFile方法的实际参数是什么?

注意,C:需要管理员权限才能写入,我建议选择另一个驱动器或文件夹(在用户配置文件中)。

作为一种解决方法,您可以考虑使用Outlook和Redemption基于的低级API - Extended MAPI。您需要使用IAttach::OpenProperty属性打开PR_ATTACH_DATA_OBJ属性,并以IMessage的形式打开流。