[英]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
周圍來做到這一點,但是我找不到任何方法。 我可以看到如何創建MailItem
( Application.CreateItem
或Items.Add
),但是無法設置現有MailItem
的MAPIOBJECT
屬性,也看不到從現有MAPI對象創建MailItem
的方法(例如來自GetBaseMessage()
IMessage
。
有沒有一種方法可以創建所需的MailItem
? 如果沒有,有沒有辦法我可以從IMessage
獲取附件(smime.p7m),而無需實現大量COM接口或使用專有的第三方庫(例如Redemption)?
您當然可以創建IMessage
, IMAPITable
, IAttach
接口定義並調用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.