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

Microsoft Interop OutLook C#- Cannot save attachments of type OLE

我有一个 C# 程序将来自 Outlook 邮箱的未读电子邮件的附件保存到一个文件夹,下面一行代码中断(第一行)是 OLE 类型的附件类型,错误为 "Outlook cannot perform this action on this type of attachment"(其中 'it' 是类型 MailItem).

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

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

传递给附件的 SaveAsFile 方法的实际参数是什么 class?

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

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

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

要查看 Outlook 中存储的数据,请查看带有 OutlookSpy 的附件(我也是其作者):select 邮件,单击 IMessage 按钮,转到 GetAttachmentTable 选项卡,双击附件,右击PR_ATTACH_DATA_OBJ属性,selectIMAPIProp::OpenProperty,selectIStorage界面