从 C# 中的 MailItem 获取命名的 MAPI 属性
Posted
技术标签:
【中文标题】从 C# 中的 MailItem 获取命名的 MAPI 属性【英文标题】:Get named MAPI Property from MailItem in C# 【发布时间】:2011-10-15 07:04:25 【问题描述】:我正在用 C# 开发 Outlook 2010 自定义插件。这是我第一次使用 C#(我通常是 java 人)。
我想访问的消息中有一个命名的(自定义)MAPI 属性,但在这样做时遇到了问题。我的理解是,在 Outlook 2007 中引入了 PropertyAccessor 对象,它允许轻松访问命名的 MAPI 属性。我按照以下文档中的说明进行操作:
http://msdn.microsoft.com/en-us/library/ff868915.aspx
我可以使用 Outlook Spy 在邮件上看到我想要访问的命名 MAPI 属性。从 Outlook Spy 我可以得到有关该属性的以下信息:
GUID: 00020329-0000-0000-C000-000000000046
Tag num: 0x80BE0102
ID: PR.AFU.MESSAGE.RETRIEVE.INFO
Type: PT_BINARY
所以我尝试了以下代码(对象邮件是 MailItem 的有效实例):
mail.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/id/00020329-0000-0000-C000-000000000046/80BE0102");
这会产生以下异常:
The property "http://schemas.microsoft.com/mapi/id/00020329-0000-0000-C000-000000000046/80BE0102" is unknown or cannot be found
所以我想知道如何真正获得这个属性?我是否错误地形成了命名空间引用?还是我需要使用本示例中概述的方法:
http://www.outlookcode.com/codedetail.aspx?id=1112
我的理解是,这仅对 2007 年之前的 Outlook 版本是必需的。非常感谢任何帮助!
【问题讨论】:
【参考方案1】:OutlookSpy 将在 IMessage 窗口的 DASL 编辑框中为您提供 DASL 属性名称。
【讨论】:
谢谢。在找出正确的格式并再次查看 Outlook Spy 后,我意识到这一点。只是来这里发布同样的东西。 对于那些偶然发现这个问题的人的未来参考,Andrew 使用(变体,生成)标签号来构造 DASL,他应该使用命名属性本身的(不变)ID .命名属性由其命名空间 (GUID) 和 ID(字符串或数字)定义。【参考方案2】:如果你尝试会发生什么
mail.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x80BE0102");
?
【讨论】:
我还没有尝试过,因为我的理解是该方法仅适用于标签号 使用 proptag 引用的方法也不起作用。 使用字符串模式有效:mail.PropertyAccessor.GetProperty("schemas.microsoft.com/mapi/string00020329-0000-0000-C000-000000000046/PR.AFU.MESSAGE.RETRIEVE.INFO");跨度> 很高兴知道...我只读到 IBM 的一个用于交换的模块在去年 10 月出现了具有相同属性的相同问题...他们宣布了一个错误修复但没有写它是如何修复的...【参考方案3】:Microsoft's MFCMapi 也是定位 DASL 和查看所有 MAPI 属性的好工具。
【讨论】:
以上是关于从 C# 中的 MailItem 获取命名的 MAPI 属性的主要内容,如果未能解决你的问题,请参考以下文章
使用 EntryID 引用时的 MailItem.SaveAs
获取 Outlook MailItem 的 Content-Type