【问题标题】:File extension for 'application/ole' attachment“应用程序/ole”附件的文件扩展名
【发布时间】:2022-05-06 09:56:51
【问题描述】:

RTF 格式的电子邮件可以嵌入嵌入式附件。 MAPI 给出内联附件的文件名,但没有扩展名。如何知道扩展名?

MAPI 将内容描述为“图片(设备独立位图)”。我可以依靠这些数据将文件扩展名计算为 BMP。但这适用于 BMP,但不适用于 PDF、WORD、EXEL。我想知道是否有一种解决方案(例如查看 REGISTRY)适用于所有内容,而无需我更改每种文件类型的代码。

通过读取附件的 MAPI 属性生成的 Mime 标头。您会看到附件缺少扩展名。

Content-Disposition: inline; filename=ATT87266
Content-Transfer-Encoding: Base64
content-type: application/ole;name="Picture (Device Independent Bitmap)"
content-description: Picture (Device Independent Bitmap)

【问题讨论】:

    标签: content-type ole file-type mapi


    【解决方案1】:

    嵌入式 OLE 附件不是文件,它们是 IStorage COM 存储。如果您查看带有 OutlookSpy 的 OLE 附件(我是它的作者 - 单击 IMessage 按钮,转到 GetAttachmentTable,双击附件),您将看到没有 PR_ATTACH_DATA_BIN 二进制属性,其中常规 by-存储价值附件;相反,您拥有的是 PR_ATTACH_DATA_OBJ 对象 (PT_OBJECT) 属性。您可以通过右键单击并选择 IMAPIProp::OpenProperty 在 OutlookSpy 中打开它,然后选择 IStorage 作为接口。

    OLE 存储将包含多个流,其中包含 Outlook 使用的标志、用于在查看对象时呈现对象的元文件以及用于创建 OLE 附件的任何 OLE 服务器使用的实际数据。您可以查看存储 CLSID 以确定用于创建附件的应用程序。一旦知道这一点,您就可以从 IStorage 内部的特定于应用程序的存储流中提取原始文件数据。

    【讨论】:

    • 感谢您的回复。正如您所描述的,我正在提取存储在 IStorage 对象中的附件,但我不知道 CLSID 部分。我将添加该代码。谢谢你,拉梅什
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    相关资源
    最近更新 更多