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

时间:2016-02-05 17:28:54

标签: c# .net exchangewebservices outlook-redemption

我整天都在试验这一点但无济于事。

我可以从Exchange邮箱成功检索日记项目,并访问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.Note类型,即电子邮件。我需要绑定到EmailMessage对象,以便我可以访问特定于电子邮件的属性,例如ToRecipients,否则无法使用。 但是Id的{​​{1}}为空,这会导致以下操作失败

attachedItem
  

值不能为空

我尝试绑定到EmailMessage mailItem = EmailMessage.Bind(_service, attachedItem.Id, _propsEmailDetail); ,但正如预期的那样,这不起作用,抛出错误

  

ID无效

我猜测也许这个ID是空的,因为电子邮件是嵌入在另一封电子邮件中的,所以不完全“在”任何文件夹中它会“有”ID,所以我尝试使用ItemAttachment存储它在邮箱中,希望我可以正常检索它:

Item.Save

然而这给了我错误

  

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

这对我没有意义,因为我的问题特别是一个无效的Id!

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

attachedItem.Save(_folderItemProcessing.Id);

这给了我

  

附件不支持此操作。

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

附注:此代码以前是使用Outlook Redemption库实现的,并且使用attachedItem.Move(_folderItemProcessing.Id); 成功访问了邮件,因此必须以某种方式实现!?

1 个答案:

答案 0 :(得分:1)

当您致电ItemAttachment.Load,将所有属性加载到项目中时,无需拨打Bind。您应该拥有所有属性,但需要将其强制转换为EmailMessage。类似的东西:

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