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

Posted

技术标签:

【中文标题】使用 EWS API 从日记项目中提取附加的电子邮件 - 嵌入式项目 ID 为空【英文标题】:Extracting attached email from a journal item with EWS API - embedded Item Id is null 【发布时间】:2016-02-05 17:28:53 【问题描述】:

我一直在试验这一天无济于事。

我可以成功地从交换邮箱中检索到日记项目,并访问附件是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 Redemption 库实现的,并且使用 mailItem_Journal.Attachments[1].EmbeddedMsg 成功访问了邮件,所以一定有可能!?

【问题讨论】:

【参考方案1】:

当您调用ItemAttachment.Load 时,将所有属性加载到项目中,无需调用Bind。您应该拥有所有属性,但您需要将其转换为EmailMessage。比如:

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

【讨论】:

不敢相信我没想过尝试演员阵容。会试一试,谢谢。

以上是关于使用 EWS API 从日记项目中提取附加的电子邮件 - 嵌入式项目 ID 为空的主要内容,如果未能解决你的问题,请参考以下文章

如果地址是别名,如何使用 ews-java-api 识别收件人电子邮件?

使用 EWS API 发送电子邮件方法获取 401 未经授权

Exchange Web 服务 (EWS) - 如何识别会议参与者是邮件组还是个人参与者

使用 EWS API 发送电子邮件时控制消息编码

从 Outlook 电子邮件中提取嵌入的图像

EWS Managed Api 中的电子邮件对话/电子邮件线程支持(针对 Exchange 2010 左右)