Как отфильтровать письма по статусу флага в EWS? - PullRequest
1 голос
/ 30 октября 2019

Я использую EWS и пытаюсь найти сообщения электронной почты, помеченные для действия (т. Е. Их свойство Flag.FlagStatus имеет значение «Помечено»). Я успешно отфильтровал электронные письма, основываясь на их теме и других свойствах, но я просто не могу понять, как их фильтровать на основе FlagStatus.

Проблема возникает при определении $searchFilter в кодениже. Строка возвращает ошибку

"Исключение вызывает" FindItems "с аргументом" 2 ":" Проверка не удалась. Имя параметра: 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")

1 Ответ

0 голосов
/ 31 октября 2019

Я бы посоветовал вам использовать Extendedproperty вместо строго типизированного (который в любом случае получен из ep), например,

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

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

должен работать, чтобы дать вам любые сообщения, которые помечены (например, свойствосуществует) или вы могли бы быть более точным, чтобы получить FollowupFlagged

        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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...