PR_ATTACH_DATA_BIN的Attachment.PropertyAccessor.GetProperty返回包含所有项目0的字节数组

问题描述 投票:0回答:2

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

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

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

有没有人知道Outlook 2016中有关MAPI的内容是否发生了变化?

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

c# office365 outlook-addin mapi outlook-2016
2个回答
0
投票

我从OutlookSpy执行以下脚本没有问题(单击脚本按钮,粘贴脚本,单击运行)

set msg = Application.ActiveExplorer.Selection(1)
set attach = msg.Attachments(1)
set ps = attach.PropertyAccessor
v = ps.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x37010102")
debug.print ps.BinaryToString(v)

0
投票

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

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

我在阅读了备注中所述的description for the Attachments.Add method之后尝试了这个:

将附件添加到项目的“附件”集合时,“附件”的“类型”属性将始终返回olOLE(6),直到项目保存为止。要确保结果一致,请始终在“附件”集合中添加或删除对象之前保存项目。

我在添加附件之前尝试保存,但没有效果。这导致我在添加后尝试保存,当我这样做时,我能够从“PR_ATTACH_DATA_BIN”属性中获取正确的值。

© www.soinside.com 2019 - 2024. All rights reserved.