Beim Email-Versand über die PowerShell ist einiges zu beachten. Besonders der Versand über SSL bringt einige Schwierigkeiten mit sich, denn das Standard-cmdlet Send-MailMessage unterstützt die Angabe eines SSL-Ports noch nicht. Um eine schnelle Übersicht zu schaffen, habe ich im Folgenden einmal ein paar Beispiele dargestellt. Diese Scripte versenden Mails über SSL mit und ohne Anhang.
Wichtig ist hier der Port für SSL (Secure Sockets Layer). Für meine Verbindung zu einem Exchange-Server nutze das explizite SSL. Im Gegensatz zum impliziten SSL, fragt der Client beim expliziten SSL den Server über eine nicht-sichere Verbindung an und dann wird auf eine sichere Verbindung gewechselt, wo die Kommunikation verschlüsselt erfolgt. Der Standard-Port für diese explizite SSL-Verbindung ist 587. Beim impliziten SSL hingegen ist es der Standard-Port 465.
$Datei = “d:\error.log” # Datei für den Mail-Anhang
$Anhang = New-Object system.net.mail.attachment($Datei)
# Anmeldung am Mailserver – Authentifizierung
$Credentials = New-Object system.net.networkcredential(“A.Damm@demo.intern”,“myPass”)
$SMTP = New-Object Net.Mail.SmtpClient
$SMTP.Host = “pod51017.outlook.com”
$SMTP.EnableSsl = $TRUE
$SMTP.Credentials = $Credentials.GetCredential($SMTP,“578”,“Basic”)
$Message = New-Object Net.Mail.MailMessage
$Message.Subject = “Betreff”
$Message.To.Add(“Cyrano.Heine@demo.intern”)
$Message.From = “A.Damm@demo.intern”
$Message.Body = “Testmail von {0} an {1}” -f $Message.From, $Message.To
$Message.Attachments.add($Anhang)
$SMTP.Send($Message)
$Anhang.dispose() # angehange Datei wieder freigeben, sonst bleibt sie vom Zugriff gesperrt
Wer seine Mails auch gern per GMX versenden möchte, der kann folgendes Script verwenden. Allerdings habe ich mir hier einige Optimierungen erspart. Die kann man allerdings dem obigen Script entnehmen.
$smtpServer = “mail.gmx.net”
$smtp = new-object Net.Mail.SmtpClient($smtpServer)
$credentials=new-object system.net.networkcredential(“MeinAccount@gmx.de”,“password”)
$smtp.credentials = $credentials.getcredential($smtpserver,“25”,“basic”)
$message = New-Object Net.Mail.MailMessage(“MeinAccount@gmx.de”,“Empfänger@demo.intern”)
$message.Subject = “Betreff”
$message.Body = “Inhalt der Mail”
$smtp.Send($message)
Bei dem Standard-cmdlet Send-MailMessage gibt es in PowerShell v2 leider noch keine Möglichkeit den SSL-Port anzugeben. Damit ist dieses cmdlet leider nur bedingt einsetzbar. Ab PowerShell v3 wird dies aber endlich anders. Dann gibt es den Parameter -Port <Int32>.
Hallo Alexander
Vielen Dank. Das ist sehr gut brauchbar für das Update meines “Monitoring-Skripts”.
Gruss
Lars
Hallo Lars,
danke für Dein Feedback. Das Lob hier gebe ich gerne an Cyrano weiter. Er hat den Artikel erstellt und ich habe diesen dann später nur aktualisiert.
Viele Grüße