原因根据 MS documentation 是:
当您将电子邮件消息移动或复制到不同的文件夹中时,
新项目在具有唯一项目 ID 的新文件夹中创建,并且
原邮件被删除。
因此你得到了异常:The specified object was not found in the store.
如何解决?
在处理电子邮件之前,create a custom extended property 并将其设置在电子邮件上并保存电子邮件,以与 EWS 服务器共享新状态。
Guid myPropertySetId = new Guid("{20B5C09F-7CAD-44c6-BDBF-8FCBEEA08544}");
ExtendedPropertyDefinition myExtendedPropertyDefinition = new ExtendedPropertyDefinition(myPropertySetId, "MyExtendedPropertyName", MapiPropertyType.String);
message.SetExtendedProperty(myExtendedPropertyDefinition, "MyExtendedPropertyValueIdentifingAnEmailMessageToBeMoved");
message.SendAndSaveCopy();
在移动电子邮件之前存储myExtendedPropertyDefinition 的值(在上面的示例中:"MyExtendedPropertyValueIdentifingAnEmailMessageToBeMoved")。然后,您可以将电子邮件移至其目标文件夹。
在原始电子邮件被处理(移动>删除)后,您可以find the email message at its new destination通过搜索自定义属性和您存储的值来识别电子邮件:
ItemView view = new ItemView(5);
SearchFilter searchFilter = new SearchFilter.IsEqualTo(myExtendedPropertyDefinition, "MyExtendedPropertyValueIdentifingAnEmailMessageToBeMoved");
view.PropertySet = new PropertySet(BasePropertySet.IdOnly, ItemSchema.Subject, myExtendedPropertyDefinition);
FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.SentItems, searchFilter, view);
为每封电子邮件使用一个唯一的标识值以获得一个搜索结果。
请注意,此解决方法是官方(由 MS)建议的方法,如 documentation 中所述。