Всем привет! В этой небольшой статье я вам расскажу — как отправить письмо на почту через PowerShell. Сегодня возьмем какой-нибудь текст. В рамках автоматизации процессов (не важно каких), иногда появляется необходимость получить информацию прямо с сервера. Для таких целей можно воспользоваться решением, которое представлено ниже.
PowerShell — как отправить письмо на почту
Давайте разберем простой пример, который мы в дальнейшем немножечко разовьем. Итак, что нужно для того, чтобы отправить письмо на почту через PowerShell?
- Адресат — адресат, который будет отправлять почту. Как правило это должен быть какой-то системный ящик, находящийся в домене.
- Получатель — электронная почта, которая будет принимать сообщения, после выполнения скрипта.
- Тема сообщения — ее можно оставить пустой, но мы ее разберем, так как она является одной из переменных, которые внесут целостность и понимание составления структуры письма.
- Тело письма — думаю тут все понятно. Хотя, мы с вами разберем интересную ситуацию, в которой необходимо переносить строчку в письме.
- Почтовый сервер — это обязательный реквизит, потому что почтовый сервер осуществляет необходимые операции по обработке и отправке письма.
- Далее необходимо создать объект, который будет являться smtp клиентом, подключенным к почтовому серверу.
Окей, с требованиями разобрались, как это все выглядит в коде? Все просто. Создаем файл с расширением *.ps1, назовем его test.ps1. Что нужно внутри? Переменные сохранены в соответствии с пунктами выше:
- $EmailFrom = «email@domain.ru»
- $EmailTo = «email@email.ru»
- $Subject = «test»
- $Body = «test»
- $SmtpServer = «post.domain.ru»
- $smtp = New-Object net.mail.smtpclient($SmtpServer)
- $smtp.Send($EmailFrom, $EmailTo, $Subject, $Body)
Откуда взялся 7-ой пункт? А это и и есть ответ на вопрос «как отправить письмо на почту через PowerShell» . В этом пункте мы сказали Smtp-клиенту отправить письмо, от адресата пункта 1, получателю пункта 2, с темой письма пункта 3, и содержимым пункта 4. Что получилось и как проверить? Правой кнопкой мыши по нашему файлу -> Run with powershell…
Кастомизация.
Итак… Выглядит не очень, простенько, что тут еще скажешь, какой код, такой и вывод. Давайте попробуем украсить. Добавил имя сервера в Subject, с которого выполняется скрипт и в тело добавим папку профиля PowerShell:
1 2 3 4 5 6 7 8 |
$server=hostname $EmailFrom = "email@from.ru" $EmailTo = "email@to.ru" $Subject = "Скрипт выполнен на $server" $Body = "Рабочая папка: $profile" $SmtpServer = "postm.domain.ru" $smtp = New-Object net.mail.smtpclient($SmtpServer) $smtp.Send($EmailFrom, $EmailTo, $Subject, $Body) |
Запускаем, проверяем…
Окей, приступим к разбору изменений. Добавилась новая переменная (первая строка) $server=hostname. Дело в том, hostname является командлетом, и чтобы переменная получила значение, необходимо выполнить этот командлет. Соответственно имя сервера попало в тему письма, а именно SOFT889.
Далее в строке 5 произошли изменения содержимого: «Рабочая папка: $profile». PowerShell способен обрабатывать системные переменные во время передачи строки. Получили соответствующий результат. Давайте усложним… Например, выведем имя операционной системы, но на новой строке. Меняем код так:
1 2 3 4 5 6 7 8 9 10 |
$os=(Get-WmiObject -class Win32_OperatingSystem).Caption $server=hostname $EmailFrom = "email@from.ru" $EmailTo = "email@to.ru" $Subject = "Скрипт выполнен на $server" $Body = "Рабочая папка: $profile" + [System.Environment]::NewLine + "Название операционной системы: $os" $SmtpServer = "postm.domain.ru" $smtp = New-Object net.mail.smtpclient($SmtpServer) $smtp.Send($EmailFrom, $EmailTo, $Subject, $Body) |
Выполняем:
Отлично, разнообразили. Давайте разбираться.
- Добавили строку с определением операционной системы — $os=(Get-WmiObject -class Win32_OperatingSystem).Caption
- В $Body добавили строку, которая отвечает за перенос строки и склейку этих строк в одну переменную — «+ [System.Environment]::NewLine +»
- Добавили вывод новой переменной с названием операционной системы — «»Название операционной системы: $os».
Итог:
Мы научились отправлять письмо на почту через PowerShell, кастомизировали его, научились работать с функцией (или методом) отправки письма smtp клиента. В дальнейшем будем более детально изучать компоненты и их ответвления/вариации. Спасибо за внимание! Подписывайтесь на наш Youtube и группу в ВК. Ну и на печеньки к чаю тоже было бы неплохо 🙂