Отправка писем из PowerShell с авторизацией
В свое время я столкнулся с задачей по отправке различных отчетов из powershell. Есть замечательный командлет send-mailmessage, он хорошо описан в справке по PowerShell.
Но есть небольшая проблема с которой сталкиваются администраторы, нет возможности авторизоваться на почтовом сервере. Самое распространенное решение это OpenRelay для IP вашего сервера. Но такое решение не совсем корректно (привет ИБ коллегам кто читает статью 🙂 ). Со временем, у меня созрел небольшой скрипт, по отправке уведомлений, который я использую в работе. Он отправляет отчет в формате HTML + encoding utf8 + авторизация на почтовом сервере.
Выглядит это так:
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 |
##--HTML--## $a = "<style>" $a = $a + "BODY{background-color:#f1f0ef;}" $a = $a + "TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}" $a = $a + "TH{border-width: 2px;padding: 40px;border-style: solid;border-color: black;background-color:#f5eff5}" $a = $a + "TD{border-width: 2px;padding: 10px;border-style: solid;border-color: black;background-color:#ecfbff}" $a = $a + "</style>" $D = "<H2>-</H2>" $D = $D + "<H3>Это автоматическое уведомление.</H3>" $D = $D + "<H4>-<H4>" $D = $D + "<H4>Статус процесса idle<H4>" $D = $D + "<H3>Формируется каждые 3 часа<H3>" ##--HTML--## ##--MAIN--## Get-Process | Where-Object {$_."Id" -like 0 } | ConvertTo-HTML -head $a,$d | Out-File C:\test\get.html $report = c:\test\get.html ##--MAIN--## #--Делаем креденталы--# $secpasswd = ConvertTo-SecureString "your_password" -AsPlainText -Force $mycreds = New-Object System.Management.Automation.PSCredential ("your_users", $secpasswd) #--Делаем креденталы--# #--MAIL--# $MailBody= Get-Content $Report #Отправляем письмо send-mailmessage $encoding = [System.Text.Encoding]::UTF8 send-mailmessage -to "ad_notify@win13.ru" -from "users@win13.ru" -subject "---Report status process id 1---" -body "$mailbody" -BodyAsHtml -smtpserver ex10.win13.ru -credential $mycreds -Encoding $encoding ##--MAIL--## |
html выглядит так
Минусы очевидны, логин\пароль от учетной записи будет лежать в открытом виде. Но с другой стороны, ничего не мешает создать учетную запись, только на возможность отправки писем внутри организации.