E-Mail-Versand über SSL per PowerShell

Beim Email-Versand über die 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.Ge
tCredential($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>.

Dieser Eintrag wurde veröffentlicht in PowerShell und verschlagwortet mit von Alexander Damm. Permanenter Link zum Eintrag.
Alexander Damm

Über Alexander Damm

Seit Windows Server 2000 beschäftige ich mich mit den Betriebssystemen von Microsoft. Dabei liegen meine Schwerpunkte auf Active Directory, Exchange Server, Lync bzw. Skype for Business, Cloud Services wie Office 365 oder Azure sowie Security Analysen, Lösungen und Konzepte. Beruflich agiere ich als System Consultant für die datom GmbH aus Dresden und freue mich auf ihre Anmerkungen oder Anfragen.

2 Gedanken zu „E-Mail-Versand über SSL per PowerShell

    • 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

Kommentar verfassen

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.