Tutorial: E-Mails senden mit Windows PowerShell
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.comodermail.gmx.net) - Port: (meistens
587für TLS oder465fü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:
- Anmeldedaten via
$credentialerfassen. - Server-Parameter festlegen.
- Befehl ausführen.