Outlook MAPIOBJECT

Outlook的对象模型中,很多对象都有一个MAPIOBJECT属性。这个属性可以用来获得对应的MAPI对象。最简单的应用可能就是取得MailItem上的一些额外属性,比如取得Attachment的ContentId。
要正确使用这个属性不容易。首先,不要在进程外取得属性的值,也就是说不能用Office Automation来启动Outlook,必须是在AddIn中取值。用伪代码,示例如下:

  • Marshal.GetIUnknownForObject(attachment.MAPIOBJECT)
  • Marshal.QueryInterface(pUnk, ref IID_IMAPIProp, out pMAPIPropObj); // Guid IID_IMAPIProp = new Guid("{00020303-0000-0000-C000-000000000046}");
  • pMAPIProp->GetProps((LPSPropTagArray)props, MAPI_UNICODE, &count, &propValue); // ULONG props[] = {1, 0x3712001E}; // property tag for content id


主要的障碍是IMessage没有.NET版本的,所以我使用了C++/CLI来做Interop。替代方案有Redemption,和MAPI33,但是都是要收费的。

你可能感兴趣的:(C++,c,.net,C#,Office)