2017-06-07 55 views
0

我編程方式試圖讓下面的方式在C#中的附件數據: -如何以編程方式訪問附件數據在Outlook中,如果附件本身是一個郵件

Microsoft.Office.Interop.Outlook.Attachment attachment = objMail.Attachments[attachmentIndex]; 

if (attachment.DisplayName.Equals("Test")) 

{ 

    const string PR_ATTACH_DATA = "http://schemas.microsoft.com/mapi/proptag/0x37010102"; 

    byte[] attachmentData = attachment.PropertyAccessor.GetProperty(PR_ATTACH_DATA); 

} 

現在我的代碼工作正常,如果附件文本文件或圖像文件。但是,如果附件本身是一個郵件,它會拋出屬性未知或無法找到的異常。

請建議在哪些情況/附件類型中,此屬性「http://schemas.microsoft.com/mapi/proptag/0x37010102」將不起作用,並且在這些情況下,將字節數組中的附件數據替代屬性/方法是什麼?

由於

回答

0

PR_ATTACH_DATA_BIN只存在用於經常按值附件(PR_ATTACH_METHOD == ATTACH_BY_VALUE)。嵌入消息或OLE附件不公開該屬性 - 它們使用PR_ATTACH_DATA_OBJ必須使用IAttach::OpenProperty(IID_IStorage, ...)打開 - 使用OutlookSpy查看現有消息(選擇消息,單擊IMessage按鈕,轉到GetAttachmentTable選項卡,雙擊附件) 。請注意,PropertyAccessor.GetProperty只能夠檢索小附件的屬性。對於大型附件,PR_ATTACH_DATA_BIN必須打開爲IStream使用IAttach::OpenProperty(IID_IStorage, ...) - PropertyAccessor.GetProperty不這樣做。您將需要使用擴展MAPI(C++或Delphi)或Redemption(暴露RDOAttachmentAsArray/AsText/AsStream性能

+0

嗨梅德,感謝您的回覆能否請您給我提供了一些例子,我怎麼能叫IAttach。: :來自C#代碼的OpenProperty?對我來說這將是很大的幫助。 – user1677408

+0

您不能 - 正如我所提到的,Extended MAPI僅限於C++或Delphi。 –

相關問題