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

如何通过Outlook生日约会关联属性获取联系人名称或EntryID?

识别Outlook中与已删除联系人关联的孤立生日/纪念日约会项

当为Outlook联系人(ContactItem)设置生日或纪念日时,系统会自动生成对应的约会项(AppointmentItem);但删除联系人后,这些关联的约会项并不会被自动移除。此前已有方案可移除与现有联系人关联的这类约会,但现在需要识别出那些和已删除联系人绑定的“孤立”约会项。

查看生日/纪念日约会项的属性后,发现有四个用于存储联系人关联信息的属性:

  • PidLidContactLinkEntry
  • PidLidContactLinkName
  • PidLidContactLinkSearchKey
  • PidLidContacts

通过appointment.PropertyAccessor,可以获取到以下两个PT_BINARY类型的属性值:

  1. PidLidContactLinkEntry
  2. PidLidContactLinkSearchKey
    另外两个属性并未被Outlook暴露出来。

核心问题

如何通过上述两个可获取的属性值,得到对应联系人的名称或EntryID?

解决方案

1. 解析PidLidContactLinkEntry获取联系人EntryID

PidLidContactLinkEntry存储的是联系人EntryID的二进制形式,可通过以下步骤转换并验证:

  • 调用appointment.PropertyAccessor.BinaryToString()方法,将该属性的PT_BINARY值转换为Base64编码的字符串,这就是对应的联系人EntryID。
  • 用Outlook的Namespace.GetItemFromID()方法尝试根据该EntryID获取联系人对象:如果返回null或抛出异常,说明该联系人已被删除,此约会项即为孤立项;若成功获取联系人,则可直接读取其FullName属性得到名称。

2. 通过PidLidContactLinkSearchKey匹配联系人

PidLidContactLinkSearchKey存储的是联系人的唯一标识SearchKey,可通过二进制对比判断:

  • 遍历联系人文件夹中的所有联系人,通过ContactItem.PropertyAccessor.GetProperty()获取每个联系人的PidTagSearchKey属性值(PT_BINARY类型)。
  • 将约会项的PidLidContactLinkSearchKey值与联系人的SearchKey值进行二进制字节对比:若找不到匹配项,说明约会项对应的联系人已被删除;若找到匹配,可直接读取联系人名称。

3. 辅助验证:结合约会标题判断

约会项的Subject属性通常默认格式为“[联系人姓名]的生日/纪念日”,可作为辅助判断手段:

  • 从Subject中提取疑似联系人姓名的部分,在联系人文件夹中进行搜索;若无匹配结果,结合上述属性验证结果,可确认该约会项为孤立项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 03:02:24