Powershell отправка почты

Продолжаем изучать и делать заметки по Powershell.
Сегодня закину себе в шаблоны готовый скрипт отправки почты. Что бы скрипт не казался совсем пустым, добавлю в письмо информацию о свободных местах на дисках компьютера и присоединю произвольный файл к нему.
Код довольно простой. Здесь главное указать верно адрес сервера SMTP и порт отправки ($serverSmtp, $port), а так же логин и пароль от ящики с которого отправляете($user, $pass). Для доменной почты это можно посмотреть в своих программах 1с (типа в справочнике “Учетные записи электронной почты” и т.д.), либо уточнить эти данные у администратора. Для почтовых ящиков сети (ya.ru, mail.ru…) параметры подключения можно найти в интернете.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
function SendMail($Settings) { #Адрес сервера SMTP для отправки и порт сервера $serverSmtp = "XXXX.ru" #Для яндекса "smtp.yandex.ru" $port = 25 #Для яндекса 587 #От кого и кому $From = "1Cadmin@XXX.ru" $To = "XXX@XXX.ru" #Тема письма $subject = "Компьютер: " + $env:COMPUTERNAME.ToString() + ". Свободное место на дисках + srvinfo" #Логин и пароль от ящики с которого отправляете $user = "XXX@XXX.ru" #Для яндекса "....@yandex.ru" $pass = "ПАРОЛЬ" #Создаем два экземпляра класса $att = New-object Net.Mail.Attachment($Settings[1]) #Файлы $mes = New-Object System.Net.Mail.MailMessage #Письмо #Формируем данные для отправки $mes.From = $from $mes.To.Add($to) $mes.Subject = $subject $mes.IsBodyHTML = $true $mes.Body = $Settings[0] #Добавляем файл $mes.Attachments.Add($att) #Создаем экземпляр класса подключения к SMTP серверу $smtp = New-Object Net.Mail.SmtpClient($serverSmtp, $port) #Сервер использует SSL $smtp.EnableSSL = $False #Для яндекса $TRUE #Создаем экземпляр класса для авторизации на сервере $smtp.Credentials = New-Object System.Net.NetworkCredential($user, $pass); #Отправляем письмо, освобождаем память $smtp.Send($mes) $att.Dispose() } $InfoDisk = get-WmiObject win32_logicaldisk | select @{Name="Диск";Expression={$_.name}}, @{Name="Свободное место GB";Expression={$_.FreeSpace / 1Gb}} | ConvertTo-HTML $File = "D:\SrvinfoServer.txt" $Settings = $InfoDisk, $File SendMail($Settings) |
Для себя так же отметим новые возможности:
- ConvertTo-HTML – конвертирует полученную информацию в формат HTML;
- get-WmiObject win32_logicaldisk – получаем информацию о дисках компьютера.
- @{Name=”Свободное место GB”;Expression={$_.FreeSpace / 1Gb}} – задаем имя колонки получаемых данных и конвертируем параметр выборки “FreeSpace” из Кб в Гг.
Пример письма, который в итоге придет на почту:

Данный скрипт оповещения может быть полезен в любой ситуации. Можем с помощью планировщика заданий настроить его работу по расписанию (как сделать bat-файл для исполнения задания powershell) – и каждую пятницу к примеру будем получать информацию (либо любую другую) о свободном месте на сервере.
Все гениальное просто! Всем удачи и хорошего кода.
спасибо