You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在EWS中按Flag.FlagStatus过滤邮件?求助排查报错问题

解决EWS过滤标记为待处理(Flagged)邮件的问题

我来帮你搞定这个困扰!你遇到的验证错误,核心原因有两个:一是属性引用错误,二是过滤类型不匹配。

错误根源分析

  1. 属性引用错了:FlagStatus不属于ItemSchema,而是要通过FlagSchema来引用。你之前写的ItemSchema::Flag.FlagStatus是不对的,EWS无法识别这个属性路径,导致验证失败。
  2. 过滤类型不匹配:FlagStatus是一个枚举类型(Microsoft.Exchange.WebServices.Data.FlagStatus),不是普通的字符串。用ContainsSubstring(子串匹配)来处理枚举值,会触发类型验证错误——你之前用ContainsSubstring处理Categories是可行的,因为Categories是字符串集合,但FlagStatus完全是另一种类型。

修正后的完整代码

把你的搜索过滤部分替换成下面的正确写法,同时保留其他逻辑:

Add-Type -Path "C:\Program Files\Microsoft\Exchange\Web Services\2.2\Microsoft.Exchange.WebServices.dll"
$ExchangeVersion = [Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2010_SP3
$service = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService($ExchangeVersion)
$service.Credentials = New-Object System.Net.NetworkCredential("username","password")
$service.Url = "https://mail.server.net/EWS/Exchange.asmx"
$inbox = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service,[Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox)
$propertySet = New-Object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.WebServices.Data.BasePropertySet]::FirstClassProperties)
$propertySet.RequestedBodyType = [Microsoft.Exchange.WebServices.Data.BodyType]::Text

# 关键修正:用FlagSchema引用FlagStatus,用IsEqualTo匹配枚举值
$searchFilter = New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+IsEqualTo(
    [Microsoft.Exchange.WebServices.Data.FlagSchema]::FlagStatus,
    [Microsoft.Exchange.WebServices.Data.FlagStatus]::Flagged
)

$view = New-Object Microsoft.Exchange.WebServices.Data.ItemView(1,0)
$messages = $inbox.FindItems($searchFilter, $view)
foreach ($item in $messages.Items) {
 $item.Load($propertySet)
 write-host $item.Flag.FlagStatus
 write-host $item.Body.Text
}

关键修改点解释

  • 用[Microsoft.Exchange.WebServices.Data.FlagSchema]::FlagStatus正确引用标记状态属性,这是EWS中专门用于标记相关属性的Schema。
  • 使用SearchFilter+IsEqualTo来匹配枚举值[Microsoft.Exchange.WebServices.Data.FlagStatus]::Flagged,而非字符串"Flagged"——直接用枚举值可以避免类型转换错误,也更符合EWS的API设计。

这样修改后,你的代码就能正确筛选出所有标记为待处理(Flagged)的邮件了。

内容的提问来源于stack exchange,提问作者teme

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:24:07