簡體   English   中英

從IMessage獲取Outlook.MailItem

[英]Get Outlook.MailItem from IMessage

我正在開發一個Outlook加載項(VSTO,C#),它需要能夠從簽名或加密的郵件中訪問smime.p7m文件。 我知道如何獲取相關的IMessage ,但是我希望在C#中實現此功能而無需實現太多的 COM包裝器。 到目前為止,這是我得到的:

我為IMAPISecureMessage編寫了C#包裝器。 它不長也不復雜。 我可以使用Outlook.MailItem並獲取其MAPIOBJECT屬性,該屬性似乎只是基礎IMessage 然后,我可以將該IMessage投射到我的IMAPISecureMessage包裝器上,並對其調用GetBaseMessage() 這一切似乎都起作用。

問題是,這將返回IMessage 我需要從此IMessage提取附件(smime.p7m)。 我希望可以通過將MailItem包裹在返回的IMessage周圍來做到這一點,但是我找不到任何方法。 我可以看到如何創建MailItemApplication.CreateItemItems.Add ),但是無法設置現有MailItemMAPIOBJECT屬性,也看不到從現有MAPI對象創建MailItem的方法(例如來自GetBaseMessage() IMessage

有沒有一種方法可以創建所需的MailItem 如果沒有,有沒有辦法我可以從IMessage獲取附件(smime.p7m),而無需實現大量COM接口或使用專有的第三方庫(例如Redemption)?

您當然可以創建IMessageIMAPITableIAttach接口定義並調用IMessage::GetAttachmentTable ,然后IMAPITable::SetColumns / QueryRows (或HrQueryAllRows )來檢索PR_ATTACH_NUM ,然后調用IMessage::OpenAttach打開附件,然后IAttach.OpenProperty(PR_ATTACH_DATA_BIN, IID_IStream, ...)以將二進制數據作為IStream打開。

您還可以嘗試將消息的消息類更改為IPM.Note ,保存它,完全釋放(並祈禱Outlook不保留引用),然后使用Namespace.GetItemFromID其作為常規MailItem打開。

或者,如上所述,您可以使用Redemption及其RDOEncryptedMessage對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM