Jak wysłać maila skryptem PowerShell?
Jeśli korzystacie z dobrodziejstw Powershell i regularnie uruchamiacie sobie różne skrypty monitorujące lub raportujące, to powinna Was zainteresować możliwość wysłania E-maila właśnie skryptem PS.
Funkcja, która nas interesuje to Send-MailMessage i w pomocy -? znajdziecie takową składnię:
Oto praktyczny przykład. Dla przejrzystości, użyjemy zmiennych:
$nadawca = “Jan.kowalski@domena.com” $odbiorca = “Adam.Malinowski@spece.it” $temat = “testowy email z powershella” $tresc = “To dziala! Email z PowerShella doszedl.” $serwer_smtp = “serwersmtp.spece.it” Send-MailMessage -SmtpServer $serwer_smtp -From $nadawca -To $odbiorca -Subject $temat -Body $tresc
Powyższy przykład możemy zmodyfikować o kilka ciekawych przełączników.
Dodanie załącznika:
-Attachments „plik.csv”
Odbiorca na kopii maila:
-cc adres@domena.com
Ukryty odbiorca:
-bcc adres_szefa@domena.com
Użycie SSL:
-useSSL
Zmiana domyślnego format tekstowego na HTML:
-BodyAsHtml
Jak widać, Send-MailMessage to bardzo proste polecenie. Z doświadczenia wiem, że funkcja automatycznego wysyłania maila jest bardzo praktyczna – pamiętacie tylko, aby za bardzo nie zasypywać siebie i kolegów zbyt dużą ilością spamu 🙂
OK. Fajne rozwiązanie. Co jednak jeśli nasz serwer wysyłania poczty wymaga autoryzacji poprzez nazwę użytkownika i hasło SMTP? np. poczta WP, Outlook.com ?
Wypróbuj to i daj znac, czy Ci dziala.
Kwestia przechowywania hasła w skrypcie to oddzielny temat 🙂
$serwer_smtp = „smtp.domena.com”
$port_smtp = „666”
$login = „zbychu666@domena.com”
$haslo = „0j3j!Al3zw@riow@n3h@5l0!”
$odbiorca = „ktos@domena.com”
$odbiorca_cc = „ktos_inny@domena.com”
$temat = „Testowy email z PS – wersja zaawansowana”
$tresc = „Wersja zaawanowana tez dziala”
$zalacznik = „W:\raport.csv”
$message = New-Object System.Net.Mail.MailMessage
$message.subject = $temat
$message.body = $tresc
$message.to.add($odbiorca)
$message.cc.add($odbiorca_cc)
$message.from = $nadawca
$message.attachments.add($zalacznik)
$smtp = New-Object System.Net.Mail.SmtpClient($serwer_smtp, $port_smtp);
$smtp.EnableSSL = $true
$smtp.Credentials = New-Object System.Net.NetworkCredential($login, $haslo);
$smtp.send($message)
write-host „E-mail wyslano”
Można użyć:
$haslo = [System.Convert]::FromBase64String(„SGVsbG8gV29ybGQ=”)
Na wzór opisywanego przeze mnie wcześniej tricku w perlu 😉
Oczywiście security jest hmmm iluzoryczne…
Polecam darmowy program Mail Alert Simple Mailer
:
https://sourceforge.net/projects/mail-alert/
Obsługuje autoryzację, SSL/TLS, StartTLS (a więc i pocztę na Gmail), polskie znaki i co najważniejsze zapisuje hasło do poczty w pliku konfiguracyjnym w postaci zaszyfrowanej. Jest banalny w konfiguracji i idealnie nadaje się wysyłania wszelkich powiadomień mailem, włączając w to zdarzenia z Dell OMSA.