вторник, 4 апреля 2017 г.

PowerShell. Список входящих/исходящих писем Outlook

Приветствую, уважаемый читатель!

Недавно столкнулся с необходимостью быстро достать список всех отправленных и полученных писем из своего почтового ящика. Доступа к почтовому серверу не было, поэтому доставал письма из загруженного в Outlook профиля. 



Скрипт, получающий список писем, приведён ниже:

$AllPath = "Входящие","Отправленные"
$Outlook = New-Object -ComObject Outlook.Application
$nspace = $Outlook.GetNameSpace("MAPI")

for ($i = 1; $i -le $nspace.Folders.Count; $i++) {
    if ($nspace.Folders.Item($i).ShowItemCount -gt 0) {
        foreach ($Path in $AllPath) {
                switch ($Path) {
                'Отправленные' {$nspace.Folders.Item($i).Folders.Item($Path).Items | select Subject,SentOn,To,SenderName,SenderEmailAddress,CC,Size | Export-Csv -Path "C:\Temp\out_collect.csv" -NoTypeInformation -UseCulture -Force -encoding "UTF8"}
                'Входящие' {$nspace.Folders.Item($i).Folders.Item($Path).Items | select Subject,ConversationTopic,CreationTime,ReceivedByName,SenderEmailAddress,To,CC,Size | Export-Csv -Path "C:\Temp\in_collect.csv" -NoTypeInformation -UseCulture -Force -encoding "UTF8"}
                }
          }
     }
}



Данный скрипт выгружает в 2 csv-файла информацию о входящих/исходящих письмах из всех загруженных в outlook профилей. Может кому пригодится.

2 комментария:

  1. Спасибо. Очень полезный скрипт! Не подскажите как сделать чтобы считывались письма из подпапок?

    ОтветитьУдалить
  2. Вам нужно дальше проваливаться по дереву вложенных папок, т.е.

    Выполняя
    $Outlook = New-Object -ComObject Outlook.Application
    $nspace = $Outlook.GetNameSpace("MAPI")

    $nspace будет являться некой единой точкой входа в подгруженные профили оутлука.

    Далее вам нужно определить какой ПЯ вас интересует и для этого вы можете посмотреть все возможные имена ПЯ, т.е. перебирайте в цикле переменную $i:
    $nspace.Folders.Item($i) | select FolderPath

    Далее, когда вы нашли нужный ПЯ (например с ID 2), вам необходимо определить, какая именно папка интересует (Входящие/Исходящие/Черновики и т.д.), её тоже перебираете в цикле:
    $nspace.Folders.Item(2).Folders.Item($i) | select FolderPath

    Таким образом, вы опускаетесь всё ниже по дереву до нужных вам созданных подпапок. И когда вы дошли до нужной ветки дерева, просто запускаете цикл, который по имени подпапки считает сколько получено писем.

    ОтветитьУдалить