Exchange server EWS附件可以';无法更新错误

Exchange server EWS附件可以';无法更新错误,exchange-server,exchangewebservices,Exchange Server,Exchangewebservices,我正在尝试遍历电子邮件对象中的附件 我在此行中收到错误“Attachments无法更新”: fa.ContentId = fa.Id; 我的代码是: EmailMessage emailMsg = EmailMessage.Bind(service, new ItemId(emailId), new PropertySet(BasePropertySet.IdOnly, ItemSchema.Attachments,ItemSchema.Body,ItemSchema.DateTimeRece

我正在尝试遍历
电子邮件
对象中的附件

我在此行中收到错误“Attachments无法更新”:

fa.ContentId = fa.Id;
我的代码是:

EmailMessage emailMsg = EmailMessage.Bind(service, new ItemId(emailId), new PropertySet(BasePropertySet.IdOnly, ItemSchema.Attachments,ItemSchema.Body,ItemSchema.DateTimeReceived,EmailMessageSchema.DisplayCc,EmailMessageSchema.DisplayTo,EmailMessageSchema.Subject,EmailMessageSchema.From));
            this.Email = msgItem;
            this.Email.Load();
            // make sure email has id or contentid
            foreach (Attachment attachment in this.Email.Attachments)
            {
                FileAttachment fa = attachment as FileAttachment;
                if (fa.ContentId == null && fa.Id != null)
                {
                    fa.Load();
                    fa.ContentId = fa.Id; // error attachments can't be updated
                }
            }

谢谢

您无法更新现有交换项目上的附件,例如,唯一有效的附件操作是获取、创建、删除。没有更新。可以设置ContentId的唯一有效上下文是在创建消息时,该消息将在CreateAttachment操作中设置此属性。要更新现有附件,您必须将其删除,然后将其重新添加为新附件。您实际试图用代码实现什么

干杯
Glen

我想做的是向用户展示他们的电子邮件及其附件。用户可以通过单击由文件附件的contentid字段组成的唯一url组成的链接来下载附件。这个方法很好用,但问题是有时候contentid是空的,所以我想确定它有一个值。为什么你要使用contentid呢?那么为什么不使用EWS返回的AttachmentId呢?如果你使用EWS,你尝试做什么都没有意义?如果您使用的是POP或IMAP客户端,那么只需通过MIME抓取整个消息,并从中解析出附件即可。除非您能够控制邮件的创建,否则在将邮件提交到存储区后,如果不删除并重新创建附件,您将无法设置contentId,这是一个糟糕的解决方案。我使用contentId的原因是,我希望用户能够在电子邮件上下载附件表单(我使用的是MVC4)。创建附件时,唯一的解决方案是将contentid指定为唯一标识符,这样用户就可以在发送电子邮件之前下载附件。我正在为这两种情况寻找全局解决方案:在发送附件之前下载附件,并从收到的电子邮件中下载附件表单。好的,但您发布的代码显示您绑定到现有项目并尝试更新附件的ContentId。这将不起作用,因为没有基础EWS方法来更新附件一旦它被创建。(您可以使用MAPI,但不能使用EWS)。因此,如果您在这样的邮件上没有ContentId,那么您唯一的选择就是删除并重新添加附件。(另一个选项可能是下载整个消息的mimotent更新mimotent,然后在更新中发回)。