【问题标题】:How to filter e-mails by Flag status in EWS?如何在 EWS 中按标志状态过滤电子邮件?
【发布时间】:2019-10-31 17:14:00
【问题描述】:

我正在使用 EWS 并尝试查找标记为采取行动的电子邮件(即,它们的 Flag.FlagStatus 属性为“已标记”)。我已经成功地根据主题和其他属性过滤了电子邮件,但我无法理解如何根据 FlagStatus 过滤它们。

在下面的代码中定义$searchFilter 时会出现问题。 该行返回错误

“使用“2”参数调用“FindItems”的异常:“验证 失败的。参数名称:searchFilter""

我尝试过使用 SearchFilter 的其他变体,例如SearchFilter+IsEqualTo,但都返回相同的错误。

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

$searchFilter = New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+ContainsSubstring([Microsoft.Exchange.WebServices.Data.ItemSchema]::Flag.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
}

这个有效:

$searchFilter = New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+ContainsSubstring([Microsoft.Exchange.WebServices.Data.ItemSchema]::Categories, "Blue Category")

这个没有:

$searchFilter = New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+ContainsSubstring([Microsoft.Exchange.WebServices.Data.ItemSchema]::Flag.FlagStatus, "Flagged")

【问题讨论】:

  • 试试这个Microsoft.Exchange.WebServices.Data.SearchFilter+IsEqualTo([Microsoft.Exchange.WebServices.Data.EmailMessageSchema]::Flag, $True)
  • @Nick 感谢您的想法!不幸的是,这会返回错误“使用“2”参数调用“FindItems”的异常:“该属性不能用于这种类型的限制。”

标签: powershell exchangewebservices


【解决方案1】:

我建议你使用扩展属性而不是强类型属性(无论如何它都是从 ep 派生的),例如

        ExtendedPropertyDefinition PidTagFlagStatus = new ExtendedPropertyDefinition(0x1090, MapiPropertyType.Integer);

        SearchFilter.Exists sfExits = new SearchFilter.Exists(PidTagFlagStatus);

应该努力为您提供任何被标记的消息(例如属性存在),或者您可以更具体地获取后续标记

        SearchFilter.IsEqualTo sfEqualTo = new SearchFilter.IsEqualTo(PidTagFlagStatus, 0x00000002);

Powershell你需要

 $PidTagFlagStatus = New-Object Microsoft.Exchange.WebServices.Data.ExtendedPropertyDefinition(0x1090, [Microsoft.Exchange.WebServices.Data.MapiPropertyType]::Integer);
 $searchFilter = New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+Exists($PidTagFlagStatus)

  $searchFilter = New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+IsEqualTo($PidTagFlagStatus, 0x00000002)

【讨论】:

  • 非常感谢您的意见!不幸的是,我无法让这段代码工作。我不是专业程序员,但这肯定适用于 Powershell 吗? Missing expression after ','. Unexpected token 'MapiPropertyType.Integer' in expression or statement. 值得一提的是,有问题的课程是ItemFlagStatus
  • 我添加了一个powershell示例帖子(原文是c#)
猜你喜欢
  • 1970-01-01
  • 2015-04-12
  • 2020-09-14
  • 2020-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多