Skip to content

Powershell: почтовый робот-парсер для Exchange

31.07.2012

Возникла необходимость обрабатывать входящие письма по MAPI протоколу по какому-либо признаку? Можно использовать платные email-парсеры (бесплатного в Интернетах не нашлось). А можно установить Exchange Web Services Managed API, написать небольшой .ps-скрипт и решить поставленную задачу. Кстати, потребуется .NET >3.5, но это ведь не проблема? ;)

В скрипте в последнем «foreach» можно реализовать любые условия: обработка адреса отправителя, фильтрация темы сообщения, разбор тела письма. Затем обработанное письмо можно поместить в «Корзину». Перед запуском в 3 и 4 строчках следует указать учетные данные служебного почтового ящика.

[Reflection.Assembly]::LoadFile("C:\Program Files\Microsoft\Exchange\Web Services\1.2\Microsoft.Exchange.WebServices.dll") > $nul
$ServiceObj = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService([Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2010_SP2)
$ServiceObj.Credentials = New-Object Net.NetworkCredential('Username', 'Password', 'domain.local')
$ServiceObj.AutodiscoverUrl("username@autodiscovery.domain")
$inbox = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($ServiceObj,[Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox)
Write-Host "Total Messages:" $inbox.TotalCount
$psPropset = new-object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.WebServices.Data.BasePropertySet]::FirstClassProperties) 
$ivItemView = New-Object Microsoft.Exchange.WebServices.Data.ItemView($inbox.TotalCount)
$fiItems = $ServiceObj.FindItems($Inbox.Id,$ivItemView) 
[Void]$ServiceObj.LoadPropertiesForItems($fiItems,$psPropset) 
foreach($Item in $fiItems.Items){
 # Перечисление свойств сообщения:
 $Item
 # Перемещение сообщения в "Корзину":
 $Item.Delete("movetodeleteditems")
}
Реклама

From → Powershell

4 комментария
  1. А можно ли как-то при помощи данного скрипта решить такую задачу: в приходящем письме вносить изменения в тему и в тело письма и потом отправлять его адресату?

    • В теории powershell эту задачу решит. Но придется сохранять письмо локально и локального его разбирать.
      Так же можно использовать правила на HUB Transport’е.

      • HUB Transport может только добавлять сообщение в начало темы, а мне надо наоборот удалять определенное число символов в начале и в конце темы.
        Какие минусы у того, что придется сохранять письмо локально?

      • Трудоемкость создания скрипта.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: