Attachment.PropertyAccessor.GetProperty for PR_ATTACH_DATA_BIN returns 字节数组,所有项目为 0

Attachment.PropertyAccessor.GetProperty for PR_ATTACH_DATA_BIN returns byte array with all items 0

我创建了一个用于发送大文件附件的 Outlook 加载项。当用户尝试附加文件时,它实际上附加了一个占位符“.txt”文件,其内容是实际附件的路径。当用户发送电子邮件时,加载项会尝试读取占位符附件的内容,以获取实际附件的路径。它在传入值 "http://schemas.microsoft.com/mapi/proptag/0x37010102" (PR_ATTACH_DATA_BIN) 时使用 Attachment.PropertyAccessor.GetProperty 方法执行此操作。

byte[] attachmentData = attachment.PropertyAccessor.GetProperty(
  "http://schemas.microsoft.com/mapi/proptag/0x37010102");

这已经工作了好几年,我已经 4 个月没有更新我的加载项了,但从今天开始它的行为有所不同。现在,此方法的 return 值 return 是一个正确长度的字节数组(在我的例子中,93 字节占位符文件为 93),但字节数组中的所有项目都是 0。如果我打开占位符文件,所有内容看起来都是正确的,所以我不明白这个问题。我们目前使用的是最新版本的 Outlook 2016(版本 1711 内部版本 8730.2127),我什至尝试恢复到最后 2 个版本,但问题仍然存在。

有谁知道关于 MAPI 的 Outlook 2016 是否发生了某些变化?

注意 - 我已经尝试使用 OutlookSpy 来了解发生了什么,但是 GetAttachmentTable 选项卡没有显示任何条目,即使从 Outlook UI 我可以清楚地看到有一个附件。

我可以通过在添加附件之后但在发送之前保存新电子邮件以某种方式解决此问题。

mailItem.Attachments.Add(filePath, OlAttachmentType.olByValue, Type.Missing, Type.Missing);
mailItem.Save();

我在阅读评论中所述的 description for the Attachments.Add method 后尝试了此操作:

When an Attachment is added to the Attachments collection of an item, the Type property of the Attachment will always return olOLE (6) until the item is saved. To ensure consistent results, always save an item before adding or removing objects in the Attachments collection.

我尝试在添加附件之前保存,但没有效果。这导致我在添加后尝试保存,当我这样做时,我能够从 "PR_ATTACH_DATA_BIN" 属性.

中获得正确的值