Пример скрипта, который из папки «c:\tmp\csv\» перебирает все csv-файлы (фильтр отсутствует, поэтому в папке должны быть только csv-файлы «правильного» шаблона, имя каждого csv должно соответствовать имени почтового домена) и блокирует/удаляет почтовые ящики согласно отметкам в csv-файлах в графе comment: block или delete. Скрипт ведет 2 лога: block_log.txt и delete_log.txt. Собственно сам скрипт с комментариями:
cls
function BlockMailbox ($PddToken, $domain, $Mailbox) {
# Формируем запрос API - см. документацию по API
$pddimpUrl = 'https://pddimp.yandex.ru'
$api = '/api2/admin/email/edit'
$URL = "$pddimpUrl"+"$api"
$Headers = @{}
$Headers.PddToken = $PddToken
$Body = @{}
$Body.domain = $domain
$Body.login = $Mailbox
# Задаем параметр блокировки ящика
$Body.enabled = "no"
# Отправляем запрос API
$InvokeWebRequest = Invoke-WebRequest -URI $URL -Method Post -Headers $Headers -Body $Body
# Перевариваем ответ в родной формат powershell
$a = $InvokeWebRequest.Content | ConvertFrom-Json
# Пишем результат в лог блокировки почтовых ящиков
$a >> c:\tmp\block_log.txt
}
# Функция, аналогичная предыдущей. Отличия: метод API, нет параметра блокировки в API запросе и запись результатов в отдельный лог
function DeleteMailbox ($PddToken, $domain, $Mailbox) {
$pddimpUrl = 'https://pddimp.yandex.ru'
$api = '/api2/admin/email/del'
$URL = "$pddimpUrl"+"$api"
$Headers = @{}
$Headers.PddToken = $PddToken
$Body = @{}
$Body.domain = $domain
$Body.login = $Mailbox
$InvokeWebRequest = Invoke-WebRequest -URI $URL -Method Post -Headers $Headers -Body $Body
$a = $InvokeWebRequest.Content | ConvertFrom-Json
$a >> c:\tmp\delete_log.txt
}
# Задаем полный путь папки с csv-файлами. Имена файла - наименование почтовых доменов.
$Path = "C:\tmp\csv\"
# Получаем список файлов в папке
$all_csv = Get-ChildItem -Path $Path
# Перебираем каждый из csv-файлов
foreach ($csv in $all_csv) {
# Из имени csv-файла получаем имя домена
$domain = $csv.BaseName
# Определяем по имени домена его токен
switch ($domain) {
"domain1.com" {$PddToken = "2DZLMPQ3ZHI7CZZ6P3NPTI9TOF2FKNIHCW8CKIHM0BCAAPZMWGXA"; break}
"domain1.ru" {$PddToken = "GDZKOYYCE7MC1QJUNK06VNX9MD1RWJWFGQB1OCNQ8KF0PY6USVBK"; break}
"domain2.com" {$PddToken = "BNXXH4O5N7UDEHLBR0OGRYOMKN7W97I6YNKCWKELXHC0EQ9JFD5P"; break}
"domain2.ru" {$PddToken = "4H9YDA7ITRCIRJNJPIU0EKXILYELYODDEDWEFRLSFYLEQY7ICHBC"; break}
}
# Выдергиваем все строки значений из csv-файла
$Mailboxes = Import-Csv -Delimiter ";" -Path $csv.FullName
# Перебираем каждую строку значений
foreach ($MailBox in $MailBoxes) {
# Если есть пометка block, скармливаем этот ящик функции блокировки
if ($Mailbox.Comment -eq "block") {
BlockMailbox $PddToken $domain $Mailbox.login
}
# Если есть пометка delete, скармливаем этот ящик функции удаления
if ($Mailbox.Comment -eq "delete") {
DeleteMailBox $PddToken $domain $Mailbox.login
}
}
}
На что следует обратить внимание:
- В предыдущей статье использовался запрос типа Get, в этом скрипте запрос типа Post — см. описание API yandex mail.
- Передаваемые в запросе API параметры чувствительны к регистру. Параметр enabled пишется маленькими буквами!
- Не разбирался, каким образом так получилось, но в процессе отладки закомментировал строчки в разделе switch, где в зависимости от имени домена задается значение токена. Казалось бы при отправке очередного API запроса, но уже с неверным токеном (нулевое значение или неочищенное значение токена от предыдущих итераций) у меня вместо блокировки ящиков 1 домена (в качестве теста) были заблокированы ящики 2-х доменов. Так что в процессе отладки лучше внимательно отслеживать за текущим значением токена, насильно его обнулять или вообще запускать тест только для 1 csv-файла. Вообще имеет смысл в разделе switch указать default для обнуления значения токена.