如何在EWS中按Flag.FlagStatus过滤邮件?求助排查报错问题
解决EWS过滤标记为待处理(Flagged)邮件的问题
我来帮你搞定这个困扰!你遇到的验证错误,核心原因有两个:一是属性引用错误,二是过滤类型不匹配。
错误根源分析
- 属性引用错了:
FlagStatus不属于ItemSchema,而是要通过FlagSchema来引用。你之前写的ItemSchema::Flag.FlagStatus是不对的,EWS无法识别这个属性路径,导致验证失败。 - 过滤类型不匹配:
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
相关产品推荐
相关产品推荐

