Microsoft Interop OutLook C# - 无法保存OLE类型的附件

时间:2015-05-15 13:43:17

标签: c# outlook interop office-interop com-interop

我有一个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#中共享代码段。

2 个答案:

答案 0 :(得分:0)

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

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

作为一个工作区,您可以考虑使用Outlook和Redemption所基于的低级API - 扩展MAPI。您需要使用IAttach :: OpenProperty属性打开PR_ATTACH_DATA_OBJ属性,并将该流打开为IMessage。

答案 1 :(得分:0)

您需要调用IAttach::OpenProperty(PR_ATTACH_DATA_OBJ, IID_IStorage, ...)然后从IStorage打开包含您所追踪的数据的特定流。请注意,流及其格式特定于创建OLE附件的应用程序。 Redemption支持Word Pad,Paint Brush,Excel,Power Point,Word,Open Office,Acrobat,位图,图元文件等格式。

IAttach::OpenProperty仅在扩展MAPI(C ++或Delphi)中可用,您无法在C#中执行此操作。

要查看存储在Outlook中的数据,请使用OutlookSpy查看附件:选择消息,单击IMessage按钮,转到GetAttachmentTable选项卡,双击附件,右键单击PR_ATTACH_DATA_OBJ属性,选择IMAPIProp :: OpenProperty,选择IStorage接口。