E-Mails mit PowerShell versenden

Innerhalb von Skripten ist es oft notwendig Nachrichten zu versenden. Die einfachste Lösung dabei sind E-Mails. Während man bei Batch-Skripten noch die Hilfe von externen Kommandozeilen-Tools (beispielsweise Blat) benötigt, lassen sich aus PowerShell-Skripten direkt E-Mails versenden. In PowerShell 1.0 geschieht dies aber noch über einen kleinen Umweg. Dort müssen explizit .NET-Klassen verwendet werden. Ab PowerShell 2.0 ist das neue Cmdlet „Send-MailMessage“ zum Versenden von E-Mails vorhanden. Es müssen lediglich ein paar Parameter übergeben werden.

Nachfolgend eine kurze Übersicht der möglichen Parameter:

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

E-Mails versenden via „Send-MailMessage“

Beim Aufruf des Cmdlets müssen einige Parameter übergeben werden. Neben dem SMTP-Server muss ein Absender, ein Empfänger, ein Betreff und ein Text angegeben werden. Hier ein kurzes Beispiel:

Send-MailMessage -SmtpServer "mail.gmx.de" -to "EMPFÄNGER@mail.de" 
-from "ABSENDER <ABSENDER@mail.de>" -Subject "Betreff" 
-body "Test für Send-MailMessage"

Selbstverständlich bietet das Cmdlet aber noch weitere Möglichkeiten. So können unter anderem auch HTML-Mails und Anhänge versendet werden. Auch die Anmeldung am SMTP-Server und die Nutzung von SSL ist möglich. Die Angabe eines spezifischen Ports ist leider erst mit PowerShell 3.0 möglich.

$SMTPServer = "SMTP-SERVER"
$username = "USERNAME"
$password = ConvertTo-SecureString "PASSWORD" -AsPlainText -Force

$From = "ABSENDER@mail.com"
$To = "EMPFÄNGER@mail.com"
$Subject = "Betreff"
$Body = @"
Nachricht
Nachricht
"@
$Attachments = "C:\PFAD_ZUM_ANHANG\BILD.jpg"
#################################################################

$creds = New-Object System.Management.Automation.PSCredential 
($username, $password)
Send-MailMessage -To $To -From $From -Subject $Subject -Body $Body 
-SmtpServer $SMTPServer -Credential $creds 
-encoding ([System.Text.Encoding]::UTF8) 
-Attachments $Attachments -UseSsl

Ich biete das Skript auch zum Download an. Vor der Verwendung müssen alle Felder oberhalb der Trennlinie den eigenen Bedürfnissen angepasst werden. Ebenso ist eine Version für GMail vorhanden, die allerdings erst ab PowerShell 3.0 funktioniert.

Download PowerShell Skript

Tobi

Hallo, mein Name ist Tobias und ich habe diesen Blog im April 2009 ins Leben gerufen. Seitdem blogge ich hier über Software, Internet, Windows und andere Themen, die mich interessieren. SSDblog ist mein zweiter Blog, indem es rund um das Thema SSDs geht. Ich würde mich freuen, wenn ihr meinen Feed abonniert oder mir auf Twitter, Facebook, Google+ und Google+ (privat) folgt.

5 Antworten

  1. Didy sagt:

    bei mir kommt immer folgender fehler beim gmx server:

    Send-MailMessage : Für den SMTP-Server ist eine sichere Verbindung erforderlich, oder der Client wurde nicht
    authentifiziert. Die Serverantwort war: Authentication required
    In C:\Users\ich\Desktop\PowerShell_Mail.ps1:16 Zeichen:1
    + Send-MailMessage -To $To -From $From -Subject $Subject -Body $Body -S …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidOperation: (System.Net.Mail.SmtpClient:SmtpClient) [Send-MailMessage], SmtpExcept
    ion
    + FullyQualifiedErrorId : SmtpException,Microsoft.PowerShell.Commands.SendMailMessage

    das script ist von hier gedownloaded und ich hab es folgendermaßen editiert:

    $SMTPServer = „mail.gmx.net“
    $username = „meinusername“
    $password = ConvertTo-SecureString „meinpw“ -AsPlainText -Force

    $From = „meineemail“
    $To = „meine2.email“
    $Subject = „ein Betreff“
    $Body = @“
    Nachricht
    Nachricht
    „@
    #################################################################

    $creds = New-Object System.Management.Automation.PSCredential ($username, $password)
    Send-MailMessage -To $To -From $From -Subject $Subject -Body $Body -SmtpServer $SMTPServer -Credential $creds -encoding ([System.Text.Encoding]::UTF8) -UseSsl
    pause

  2. Gerald Matz sagt:

    Besten Dank für diese sehr hilfreiche Vorlage !!! Besonders was die Passwortverschlüsselung mit PSCredential betrifft hat mir die Scriptvorlage viel Zeit erspart.
    Ich hatte auch erst Fehlermeldungen, aber als ich alle Parameter auf eine Zeile „gezogen“ habe liefs sofort. Noch mit -Port 587 ergänzt, und deinen Hinweis das PS 3.0 notwendig ist berücksichtigt und alles ist wunderbar. Schön das es Leute wie dich gibt die ihr Wissen teilen. Danke!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.