2013-10-11 221 views
0

RTF格式的電子郵件可以嵌入內嵌附件。 MAPI提供了內聯附件的文件名,但沒有擴展名。如何知道擴展名?'application/ole'附件的文件擴展名

MAPI將content-description描述爲'Picture(Device Independent Bitmap)'。我可以依靠這些數據來計算文件擴展名爲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) 

回答

1

嵌入式OLE附件不是文件,它們是IStorage COM存儲。如果您查看OLE附件OutlookSpy(單擊IMessage按鈕,轉至GetAttachmentTable,雙擊附件),您將看到沒有PR_ATTACH_DATA_BIN二進制屬性,其中存儲常規的按值附件;你所擁有的是PR_ATTACH_DATA_OBJ對象(PT_OBJECT)屬性。您可以通過右擊並選擇IMAPIProp :: OpenProperty,然後選擇IStorage作爲接口,在OutlookSpy中打開它。

OLE存儲將包含幾個包含Outlook使用的標誌的流,查看時用於呈現對象的元文件以及任何OLE服務器用於創建OLE附件的實際數據。您可以查看存儲CLSID以確定用於創建附件的應用程序。一旦你知道了,你可以從該IStorage中的特定於應用程序的存儲流中提取原始文件數據。

+0

感謝您的回覆。正如你所描述的,我正在提取存儲在IStorage對象內的附件,但我不知道CLSID部分。我將添加該代碼。謝謝,Ramesh – user1174790