我一直在努力工作几个月,ms图api中出现随机错误。最后我在整个混乱中找到了一些意思,但我认为图api中存在错误。
我开发了一个多租户outlook-addin(JS),我的客户用它来存储他们的电子邮件和/或附件。我使用Office.context.mailbox.item对象来获取消息的ItemId和附件的Id。我将这些id发送给一个sevrer,使用EWS进行重新提取电子邮件和/或附件。由于客户可以选择保存哪些附件,因此我需要将选定的附件ID发送到服务器,在那里我检索电子邮件和附件。但是,当我尝试将附件ID与从Outlook应用程序中选择的匹配时,它们是不同的,我找不到正确的附件。这种情况发生在随机消息中,随机租户。
从我从ID中看到的电子邮件和附件,看起来附件ID的前缀是电子邮件ID。有时他们不匹配。例如:
用户在Outlook桌面客户端(Mac或Windows)中选择一封电子邮件,并获取该电子邮件的ID:
AAMkADYxNWNjMTRiLWFjYTYtNDM1OS04MTNjLThiNzM1ZWM0ZDFmZgBGAAAAAADbXpqFYshcSYLgLaL8DcdZBwDVFKe56AEMQo4qySw0u6tyAAAfj8mWAADVFKe56AEMQo4qySw0u6tyAABBmpnFAAA=
附件具有此ID(与电子邮件ID不匹配):
AAMkADYxNWNjMTRiLWFjYTYtNDM1OS04MTNjLThiNzM1ZWM0ZDFmZgBGAAAAAADbXpqFYshcSYLgLaL8DcdZBwDVFKe56AEMQo4qySw0u6tyAAAAAAEJAADVFKe56AEMQo4qySw0u6tyAABBmmK4AAABEgAQAOBOPI4JZ71CuMzlk7nqfZw=
但是当我使用电子邮件ID(我知道REST / EWS ID差异)查询EWS时,我得到了附件的ID(与电子邮件ID匹配):
AAMkADYxNWNjMTRiLWFjYTYtNDM1OS04MTNjLThiNzM1ZWM0ZDFmZgBGAAAAAADbXpqFYshcSYLgLaL8DcdZBwDVFKe56AEMQo4qySw0u6tyAAAfj8mWAADVFKe56AEMQo4qySw0u6tyAABBmpnFAAABEgAQAOBOPI4JZ71CuMzlk7nqfZw=
有趣的是,它适用于OWA - 这个目标是正确的。此特定电子邮件已被移动,我知道在移动文件时,ID会更改,但附件ID是否应该跟随?在EWS中,id似乎已经改变,但在Outlook
中没有答案 0 :(得分:2)
我使用我的Id-Whispering技能来查看你的ID。
第一个是项目本身的ID,而不是项目的附件。此id的实际PR_ENTRYID为AAAAANtemoViyFxJguAtovwNx1kHANUUp7noAQxCjirJLDS7q3IAAB + PyZYAANUUp7noAQxCjirJLDS7q3IAAEGamcUAAA ==
第二个是附件,但父项是不同的。此id的PR_ENTRYID是 AAAAANtemoViyFxJguAtovwNx1kHANUUp7noAQxCjirJLDS7q3IAAAAAAQkAANUUp7noAQxCjirJLDS7q3IAAEGaYrgAAA ==
附件ID部分:EADgTjyOCWe9QrjM5ZO56n2c
第三个也是附件,相同的"附件ID" id的一部分,但在这种情况下,它指的是原始位置中的项目。如您所见,PR_ENTRYID匹配: AAAAANtemoViyFxJguAtovwNx1kHANUUp7noAQxCjirJLDS7q3IAAB + PyZYAANUUp7noAQxCjirJLDS7q3IAAEGamcUAAA ==
附件ID部分:EADgTjyOCWe9QrjM5ZO56n2c
那么这里发生了什么?看起来是第二种情况,该项目位于不同的文件夹中。 PR_ENTRYID由FID(文件夹ID)和MID(消息ID)组成。因此,如果项目从一个文件夹移动到另一个文件夹,则id会更改。你把它移回去,它又恢复了原来的id。很奇怪,我知道。
这是微软提出不可变ID的一个很好的理由:)