Jak wysłać maila skryptem PowerShell?


 

powershell_ikona_200Jeś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ę:

Send-MailMessage [-To] <String[]> [-Subject] [[-Body] ] [[-SmtpServer] ] -From [-Attachments <String[]> ] [-Bcc <String[]> ] [-BodyAsHtml] [-Cc <String[]> ] [-Credential ] [-DeliveryNotificationOption ] [-Encoding ] [-Port ] [-Priority ] [-UseSsl] [ ]

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 :)


Podobne Tematy:

  • grzesiek

    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 ?

    • Łukasz Skalikow

      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…

  • johndoe78

    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.