Tutorial: E-Mails senden mit Windows PowerShell

Melden

Hier ist ein umfassendes Tutorial, wie du mit der Windows PowerShell E-Mails versenden kannst.

Das Versenden von E-Mails über die PowerShell ist besonders nützlich für die Automatisierung, zum Beispiel um Statusberichte von Servern, Benachrichtigungen bei Fehlern oder Log-Dateien zu verschicken.

In diesem Tutorial nutzen wir den Befehl Send-MailMessage.


1. Voraussetzungen

Bevor du startest, benötigst du die SMTP-Daten deines E-Mail-Anbieters:

  • SMTP-Server: (z. B. smtp.gmail.com oder mail.gmx.net)
  • Port: (meistens 587 für TLS oder 465 für SSL)
  • E-Mail-Adresse & Passwort
  • Empfänger-Adresse

2. Die Grundlagen: Der Send-MailMessage Befehl

Der einfachste Weg ist die Verwendung des Cmdlets Send-MailMessage. Hier ist die Grundstruktur:

Send-MailMessage -To "empfaenger@beispiel.de" `
                 -From "deine-email@beispiel.de" `
                 -Subject "Test E-Mail von PowerShell" `
                 -Body "Dies ist eine Testnachricht." `
                 -SmtpServer "smtp.deinanbieter.de" `
                 -Port 587 `
                 -UseSsl

Hinweis: Das Backtick-Symbol ( ` ) am Ende der Zeilen erlaubt es, den Befehl über mehrere Zeilen zu schreiben, um ihn übersichtlicher zu gestalten.


3. E-Mail mit Authentifizierung (Benutzername & Passwort)

Die meisten modernen E-Mail-Server verlangen eine Anmeldung. Da man Passwörter niemals im Klartext in ein Skript schreiben sollte, nutzen wir das Objekt Get-Credential.

Hier ist ein vollständiges Skript-Beispiel:

# 1. Anmeldedaten abfragen (poppt ein Fenster auf)
$credential = Get-Credential

# 2. Variablen definieren
$smtpserver = "smtp.gmail.com" # Beispiel Gmail
$port = 587
$from = "deine-email@gmail.com"
$to = "empfaenger@beispiel.de"
$subject = "Automatisierter Bericht"
$body = "Hallo, anbei findest du die gewünschten Informationen."

# 3. E-Mail senden
Send-MailMessage -To $to `
                 -From $from `
                 -Subject $subject `
                 -Body $body `
                 -SmtpServer $smtpserver `
                 -Port $port `
                 -Credential $credential `
                 -UseSsl

4. E-Mail mit Anhang versenden

Wenn du eine Datei (z. B. ein Backup oder ein Log) mitsenden möchtest, füge den Parameter -Attachments hinzu:

Send-MailMessage -To $to `
                 -From $from `
                 -Subject "Log-Datei" `
                 -Body "Hier ist das aktuelle Log." `
                 -SmtpServer $smtpserver `
                 -Port $port `
                 -Credential $credential `
                 -UseSsl `
                 -Attachments "C:\Logs\heute.txt"

5. Besonderheiten bei Gmail, Outlook & Co.

Moderne Provider haben hohe Sicherheitsstandards. Wenn der Versand fehlschlägt, prüfe folgende Punkte:

  • App-Passwörter: Bei Anbietern mit Zwei-Faktor-Authentifizierung (2FA) funktioniert dein normales Passwort nicht. Du musst in deinem Google- oder Microsoft-Konto ein sogenanntes "App-Passwort" erstellen.
  • TLS-Version: Die PowerShell verwendet manchmal standardmäßig veraltete Sicherheitsprotokolle. Solltest du einen Verbindungsfehler erhalten, füge diese Zeile ganz oben in dein Skript ein:

6. Wichtiger Hinweis zur Zukunft von Send-MailMessage

Microsoft hat das Cmdlet Send-MailMessage mittlerweile als veraltet (deprecated) eingestuft, da es keine moderne Authentifizierung (wie OAuth2) unterstützt.

  • Für den internen Gebrauch (lokale Exchange-Server oder SMTP-Relays in Firmennetzwerken) ist es weiterhin sicher und stabil.
  • Für hochsichere Cloud-Dienste empfehlen Experten heute eher die Nutzung von APIs (wie die Microsoft Graph API) oder spezialisierten Modulen (wie Mailozaurr).

Zusammenfassung

Mit nur wenigen Zeilen Code kannst du die PowerShell nutzen, um E-Mails zu verschicken. Für einfache Skripte ist Send-MailMessage die schnellste Lösung:

  1. Anmeldedaten via $credential erfassen.
  2. Server-Parameter festlegen.
  3. Befehl ausführen.
0