使用 Exchange Web Services 2007 将电子邮件标记为已读

Posted

技术标签:

【中文标题】使用 Exchange Web Services 2007 将电子邮件标记为已读【英文标题】:Marking an email message as read using Exchange Web Services 2007 【发布时间】:2011-10-14 07:43:07 【问题描述】:

我使用 Exchange Web Services 2007 订阅了一个电子邮件帐户,并在收到新电子邮件时处理附件。我想在处理完这些电子邮件后在服务器上将它们标记为“已读”,但我发现它并不像将“IsRead”属性设置为true那么简单。我什至尝试过以下方法:

Dim msg As EmailMessage
msg.Load(New PropertySet(EmailMessageSchema.IsRead))
msg.IsRead = True

我在发现如果我想与消息的某些部分(如附件)交互时必须加载特定的架构属性后尝试了这个。我还尝试将消息直接绑定到新对象并加载其他属性:

Dim iID as ItemId = msg.Id
Dim tmpMsg as EmailMessage = EmailMessage.Bind(service, iID, New PropertySet(BasePropertySet.FirstClassProperties, EmailMessageSchema.IsRead))
tmpMsg.IsRead = True

我运气不好。我搜索了一下,发现one MSDN blog example 似乎应该可以工作,但是他有一些我似乎找不到的类(比如Microsoft.Exchange.WebServices.SetItemFieldType 类;我在WebServices 命名空间中得到的所有内容都是DataAutoDiscover 命名空间,没有类或任何东西)。而且由于我找不到这些课程或任何类似的东西,我有点卡住了。他还列出了一个 DAV 示例,但同样,他的代码使用了我在我的 EWS dll 版本(即 14.0.0.0)中找不到的类。我尝试从 Microsoft 下载最新的 API,但它似乎与我已有的版本相同。

所以我的问题是,有没有办法使用 Exchange 2007 Web 服务将项目标记为已读?

【问题讨论】:

【参考方案1】:

您需要调用 tmpMsg.Update 方法将更改持久化回服务器。

【讨论】:

【参考方案2】:

EmailMessage.Update() 必须在使用 EmailMessage.Move() 之前调用,因为这会创建一个具有新 id 的新项目并删除原始项目。

【讨论】:

我认为这是一个答案,但对于我用谷歌搜索到这里的问题,而不是提出的问题。因此,希望将其作为评论包含在内。这个和其他答案之间的区别是提到它必须在其他常见操作之前使用,其他地方没有提到(comment on this answer 除外) 感谢您解释差异(请原谅我缺乏实际的技术洞察力)。如果您edit 将其放入答案正文并可以“弯曲”答案以回答顶部的问题(同时仍提供相同的信息),那么我认为我们有一个有用的答案贡献。 (抱歉,我仍然不会投票,但我想那些有技术理解的人可能会投票。)玩得开心,祝你好运。

以上是关于使用 Exchange Web Services 2007 将电子邮件标记为已读的主要内容,如果未能解决你的问题,请参考以下文章

PowerShell-Exchange:Services Monitor Report

[Programming WCF Services]Chapter 1. WCF Essentials - Metadata Exchange

使用Exchange Web服务API

需要一种使用 EWS Web 服务 (SOAP) 查找 Exchange 产品版本的方法

Web Services 教程

使用 TokenCredentials 的 Exchange Web 服务 (EWS) 单点登录?