0

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)
4

1 回答 1

1

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

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

于 2013-10-11T16:23:19.220 回答