使用 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
命名空间中得到的所有内容都是Data
和 AutoDiscover
命名空间,没有类或任何东西)。而且由于我找不到这些课程或任何类似的东西,我有点卡住了。他还列出了一个 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