You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改代码在Outlook 365中读取PidNameContentType属性值?

解决Redemption读取Outlook 365中PidNameContentType属性为空的问题

你硬编码的属性标签0x8063001F是PidNameContentType在特定环境下的动态分配值,这个实例ID(即0x8063中的63部分)并非固定不变——不同Outlook版本、配置或邮箱环境中,命名属性的实例ID可能会变化,这就是代码在Outlook 2016正常但365中读取为空的核心原因。

正确的做法是通过命名属性的官方定义动态获取对应属性标签,而非依赖硬编码的动态值。PidNameContentType属于PS_PUBLIC_STRINGS命名空间,对应的属性名称为Content-Type。

修改后的代码如下:

Redemption.MAPIUtils MAPIUtils_l = new Redemption.MAPIUtils();
// PS_PUBLIC_STRINGS命名空间的固定GUID
Guid psPublicStrings = new Guid("00020329-0000-0000-C000-000000000046");
// 根据命名空间和属性名称动态获取属性标签
int contentTypeTag = MAPIUtils_l.GetIDsFromNames(NewMail_l.MAPIOBJECT, ref psPublicStrings, "Content-Type", 0);
// 读取属性值
string Content_l = MAPIUtils_l.HrGetOneProp(NewMail_l.MAPIOBJECT, contentTypeTag);

说明

  • PS_PUBLIC_STRINGS的GUID是固定的,对应MAPI公共命名属性空间;
  • GetIDsFromNames方法会根据当前环境动态解析出正确的属性标签,彻底避免硬编码实例ID带来的兼容性问题;
  • 此修改后,代码可在Outlook 2016和365环境中一致读取到PidNameContentType的正确值。

内容的提问来源于stack exchange,提问作者Andreas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 01:53:26