使用 EWS API 从日记项目中提取附加的电子邮件 - 嵌入的项目 ID 为空

本文关键字:项目 电子邮件 为空 ID API EWS 日记 提取 使用 | 更新日期: 2023-09-27 18:33:21

我整天都在试验这个,但无济于事。

我可以成功地从交换邮箱中检索日记项目,并访问作为ItemAttachment的附件:

EmailMessage mailItem_Journal = EmailMessage.Bind(_service, item.Id, _propsJournalItem);
ItemAttachment itemAttachment = mailItem_Journal.Attachments[0] as ItemAttachment;
itemAttachment.Load();
Item attachedItem = itemAttachment.Item;

里面包含的Item是IPM类型。注意,即电子邮件。我需要绑定到EmailMessage对象,以便我可以访问电子邮件特定的属性,例如 ToRecipients否则不可用。但是,attachedItemId为 null,这会导致以下操作失败

EmailMessage mailItem = EmailMessage.Bind(_service, attachedItem.Id, _propsEmailDetail);

值不能为空

我尝试绑定到ItemAttachment但正如预期的那样,这不起作用,抛出了错误

无效的 ID

我猜也许 Id 是空的,因为电子邮件嵌入在另一封电子邮件中,因此并不完全"在"任何会获得"拥有"id 的文件夹中,所以我尝试使用 Item.Save 将其存储在邮箱中,希望我可以正常检索它:

attachedItem.Save(_folderItemProcessing.Id);

但是这给了我错误

无法执行此操作,因为此服务对象已具有 ID。若要更新此服务对象,请改用 Update(( 方法。

这对我来说毫无意义,因为我的问题专门是一个空的 Id!

我不明白在这种情况下如何使用 Update 方法,所以我尝试移动该项目

attachedItem.Move(_folderItemProcessing.Id);

这给了我

附件不支持此操作。

如何访问附加电子邮件的电子邮件属性?我只需要阅读它们,除了之后将父邮件移动到文件夹之外,我不需要操作任何对象,我已经成功地做到了。

旁注:此代码以前是使用 Outlook 兑换库实现的,并且使用 mailItem_Journal.Attachments[1].EmbeddedMsg 成功访问了邮件,所以一定以某种方式成为可能!?

使用 EWS API 从日记项目中提取附加的电子邮件 - 嵌入的项目 ID 为空

当你调用 ItemAttachment.Load 时,将所有属性加载到项目中,不需要调用 Bind 。您应该拥有所有属性,但需要将其强制转换为EmailMessage。像这样:

itemAttachment.Load();
EmailMessage attachedMsg = itemAttachment.Item as EmailMessage;