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.
Sie sehen gerade einen Platzhalterinhalt von X. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr Informationen
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
Seltsam, bei mir klappt das nach wie vor und dein Code sieht auch gut aus.
Hast du vielleicht irgendwelche Sicherheitsfunktionen bei deinem GMX-Konto aktiviert?
Kommt bei mir auch :-(
Versuch mal den richtigen Port mit “-Port” zu ergänzen.
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!
Hallo Tobi,
ich habe dein Skript zwar noch nicht genutzt, aber ich kann es wahrscheinlich bald sehr gut gebrauchen, denke ich.
Da mein Postfach nach vielen Jahren der Nutzung mittlerweile nun zum Platzen gefüllt ist, plane ich, meine Mails ordnerweise an ein anderes Postfach weiterzuleiten. Dabei wird mir dein Skript sicherlich eine große Hilfe sein. Vielen Dank deshalb schonmal im Voraus.
Weißt du rein zufällig, wie ich auf Mails im Unterordner zugreifen kann und wie ich diese dann weiterleite?
Hallo Daniel, das Skript ist eher dazu da, mittels Powershell neue Mails zu generieren. Also z.B. Logs etc. schnell und einfach via Mail zu versenden. Ein Weiterleiten von bestehenden Mails innerhalb eines Postfachs ist damit nicht möglich.
In diesem Fall wäre es doch viel einfacher beide E-Mail-Konten in Thunderbird zu verbinden und dann die gewünschten Mails bzw. Ordner via Drag and Drop zu verschieben.