Outlook DocumentItem(IMessage)在打开后丢失附件

Outlook DocumentItem(IMessage)在打开后丢失附件,outlook,outlook-addin,mapi,Outlook,Outlook Addin,Mapi,在我们的MAPI邮件存储提供程序中,我们同时提供电子邮件和非outlook项目office文档等。从技术上讲,我们将这些文档作为IMessage对象提供,其中包含一个附件和一个特定的PR_message_类,例如IPM.Document.txtfile。Outlook然后将此对象视为DocumentItem,而不是MailItem 正如您在下面的屏幕截图中所看到的,这很好用。预览器按预期工作,双击该项目将在适当的应用程序(如记事本)中打开该项目 但是,打开项目后,一旦外部应用程序关闭,就会出现问

在我们的MAPI邮件存储提供程序中,我们同时提供电子邮件和非outlook项目office文档等。从技术上讲,我们将这些文档作为IMessage对象提供,其中包含一个附件和一个特定的PR_message_类,例如IPM.Document.txtfile。Outlook然后将此对象视为DocumentItem,而不是MailItem

正如您在下面的屏幕截图中所看到的,这很好用。预览器按预期工作,双击该项目将在适当的应用程序(如记事本)中打开该项目

但是,打开项目后,一旦外部应用程序关闭,就会出现问题。预览将中断,在首先选择另一个项目之前,无法再次打开该项目

根据OutlookSpy,我们的IMessage对象仍然很好。是OOM DocumentItem包装器现在不知何故丢失了其附件:

是什么导致了这种行为?有没有我们错过的更新?Outlook项目是否显示已损坏的旧IMessage对象?我们已经在这个主题上花费了相当多的研究,欢迎所有的指点

[编辑1]

下面是Outlook spy,说明我们的IMessage对象仍然正常:

[编辑2]


只要外部应用程序没有关闭,一切都很好。我可以任意多次打开文档,但只要关闭一个外部查看器实例,Outlook项目就会损坏。

答案非常简单

PR_MESSAGE_FLAGS属性需要包括MSGFLAG_HASATTACH


添加此标志立即解决了此问题,并且非常有意义。只是Outlook在第一次访问时工作,然后中断的结果行为让我们感到不舒服

IMessage | GetAttachmentTable显示了什么?当您尝试重新打开该项目时,是否可以单步查看代码以查看Outlook调用?IMessage | GetAttachmentTable很好,我将在一分钟内更新答案。当在附件消失后双击该项目时,Outlook不会与我们的邮件存储提供程序进行太多的对话,而只与compareEntryIDs/getIDsFromNames进行比较。。。没有调用我们的IMessage。Outlook在调用GetIDsFromNames时请求什么名称/ID?将在早上我有权访问系统时发布。回答问题:为什么您一直关注项目的重新打开,而不是关闭外部应用程序时发生的大量MAPI请求?因为在我看来,Outlook包装器开始出现故障时会出现这种情况吗?你在怀疑什么吗?有关系吗?