So senden Sie E-Mails mit Send-MailMessage in PowerShell

Haben Sie schon mal mit dem Cmdlet „Send-MailMessage“ in PowerShell experimentiert und sind dabei auf seltsame Probleme gestoßen? Ja, das ist ziemlich ärgerlich. Es hält zwar, was es verspricht – es ermöglicht das Versenden von SMTP-E-Mails direkt aus PowerShell –, hat aber seine Tücken, insbesondere beim Versenden von E-Mails über Gmail oder andere Anbieter, die Verschlüsselung und Authentifizierung erfordern. Manchmal wird die Verbindung einfach nicht hergestellt, oder es erscheinen kryptische Fehlermeldungen wie „Das Remotezertifikat ist ungültig“ oder „Daten konnten nicht von der Transportverbindung gelesen werden“, was einen zur Verzweiflung bringen kann. Wenn Sie Benachrichtigungen, Berichte versenden oder einfach E-Mail-Benachrichtigungen automatisieren möchten, ist es hilfreich, einige Tricks zu kennen – insbesondere im Hinblick auf die Verwendung der richtigen Ports, die Aktivierung von SSL und den korrekten Umgang mit Anmeldeinformationen. Es erfordert etwas Fingerspitzengefühl, aber wenn Sie es richtig machen, vermeiden Sie die meisten häufigen Fehler.

So beheben Sie häufige Verbindungsprobleme beim Senden von E-Mails mit SMTP-Anbietern

Methode 1: Stellen Sie sicher, dass Sie den richtigen Port verwenden und SSL aktiviert haben.

Das ist eigentlich offensichtlich, wird aber oft übersehen. SMTP-Server, die Verschlüsselung benötigen, funktionieren (normalerweise) nicht mit Port 25. Wechseln Sie stattdessen zu Port 465 für SSL oder Port 587 für STARTTLS – das ist die übliche Konfiguration für Gmail, Outlook usw. Die Parameter `-Port` und `-UseSsl` lösen das Problem in der Regel.

-SmtpServer 'smtp.gmail.com' -Port 587 -UseSsl

Wenn Fehlermeldungen zu ungültigen Zertifikaten auftreten, liegt das möglicherweise daran, dass Ihr SSL-Zertifikat nicht mit dem FQDN des Servers übereinstimmt oder Ihre PowerShell-Version TLS nicht korrekt verarbeitet. Versuchen Sie auf älteren Windows-Rechnern, TLS 1.2 zu erzwingen.

[Net. ServicePointManager]::SecurityProtocol = [Net. SecurityProtocolType]::Tls12

Diese kleine Zeile setzt das Sicherheitsprotokoll quasi zurück, um die modernen TLS-Versionen zu unterstützen, die SMTP-Server heutzutage erwarten.

Methode 2: Ports öffnen und Netzwerkverbindung prüfen

Bevor Sie davon ausgehen, dass der Code fehlerhaft ist, überprüfen Sie, ob der SMTP-Port erreichbar ist. Starten Sie PowerShell und führen Sie folgenden Befehl aus:

Test-NetConnection smtp.gmail.com -Port 587

Wenn dieser Test fehlschlägt, blockiert möglicherweise Ihre Firewall, Ihr Router oder Ihr Internetanbieter den Port. Versuchen Sie, einen anderen Port zu verwenden – beispielsweise 465 statt 587 – oder fragen Sie Ihren Netzwerkadministrator, ob SMTP-Verkehr erlaubt ist. Manchmal sind klassische Portprobleme die Ursache für Verbindungsabbrüche.

Methode 3: Korrekte Anmeldeinformationen und Authentifizierung

Die meisten SMTP-Server erlauben heutzutage kein anonymes Versenden von E-Mails mehr. Sie müssen sich mit einem Benutzernamen und einem Passwort über den Parameter `-Credential` authentifizieren. Wenn der Server auf einer sicheren Anmeldung besteht, verwenden Sie `-Credential` wie folgt:

$cred = Get-Credential Send-MailMessage...-Credential $cred

Alternativ können Sie, falls Sie Benutzername und Passwort bereits kennen, manuell ein PSCredential- Objekt erstellen. Beachten Sie jedoch: PowerShell speichert diese Informationen unverschlüsselt im Verlauf – das ist nicht besonders sicher. Es empfiehlt sich, die Anmeldeinformationen jedes Mal abzufragen oder sie sicher in Skripten zu verarbeiten.

Methode 4: App-Passwörter anstelle Ihres Hauptpassworts verwenden

Wenn Sie E-Mails über Gmail versenden und die Zwei-Faktor-Authentifizierung aktiviert haben, funktioniert Ihr normales Passwort nicht. Sie müssen in Ihren Google-Kontoeinstellungen ein App-Passwort erstellen – einen 16-stelligen Code. Generieren Sie dieses und verwenden Sie es anschließend in Ihrem Skript anstelle des normalen Passworts.

Beispiel:

$Password = "your_google_app_password" | ConvertTo-SecureString -AsPlainText -Force $Credential = New-Object System. Management. Automation. PSCredential("$From", $Password) Send-MailMessage -From "$From" -To "$To" -Subject "Test" -Body "Message" -SmtpServer "smtp.gmail.com" -Port 587 -UseSsl -Credential $Credential

PowerShell kann tückisch sein und Ihr Passwort möglicherweise im Klartext speichern – seien Sie daher vorsichtig, wenn Sie Skripte für den Produktiveinsatz schreiben oder Protokolle teilen. Beachten Sie außerdem, dass Send-MailMessage in neueren PowerShell-Versionen aufgrund von Sicherheitsbedenken als veraltet gekennzeichnet ist. Microsoft empfiehlt, für Produktivskripte auf die Graph-API oder andere Methoden umzusteigen. Für schnelle Prototypen funktioniert es aber – meistens – noch.

Option 1: Die richtige TLS-Version verwenden

Falls ungewöhnliche SSL-Fehler oder Zertifikatsprobleme auftreten, erzwingen Sie TLS 1.2 zu Beginn Ihrer Sitzung wie folgt:

[Net. ServicePointManager]::SecurityProtocol = [Net. SecurityProtocolType]::Tls12

Dadurch wird sichergestellt, dass Ihre Verbindung die neueren Protokolle verwendet, die Gmail und die meisten SMTP-Server heutzutage benötigen.

Option 2: Zertifikate prüfen

Wenn Fehlermeldungen darauf hinweisen, dass das Remote-Zertifikat ungültig ist, liegt das möglicherweise am Truststore Ihres Rechners oder am Serverzertifikat. In manchen Konfigurationen können Sie die Zertifikatsvalidierung vorübergehend deaktivieren (langfristig nicht empfehlenswert).Besser ist es jedoch, Ihre Stammzertifikate zu aktualisieren und sicherzustellen, dass Ihr Rechner dem SSL-Zertifikat des Servers vertraut.

Einige Benutzer berichten, dass bei bestimmten Konfigurationen ein Neustart von PowerShell oder ein Update von Windows SSL-Vertrauensprobleme behebt.

Zusammenfassung

  • Verwenden Sie -Port 465 oder 587 + -UseSsl
  • Testen Sie die Netzwerkverbindung mitTest-NetConnection
  • Stellen Sie sicher, dass Sie sich mit einem Benutzernamen und einem Passwort authentifizieren, insbesondere bei Gmail oder Outlook.
  • Generieren und verwenden Sie App-Passwörter, wenn die Zwei-Faktor-Authentifizierung aktiviert ist.
  • Erzwingen Sie TLS 1.2 mit dem entsprechenden Befehl, falls SSL-Fehler auftreten.

Zusammenfassung

Das mag anfangs etwas knifflig erscheinen, aber sobald Ports, SSL und Anmeldeinformationen korrekt konfiguriert sind, sollten Ihre PowerShell-E-Mail-Skripte reibungslos funktionieren. Beachten Sie jedoch, dass das integrierte Cmdlet nicht zukunftssicher ist – Microsoft empfiehlt für professionelle Anwendungen den Umstieg auf die Graph API oder die. NET SDKs. Für schnelle Skripte oder Tests ist es aber nach wie vor ausreichend – vorausgesetzt, Sie beheben diese häufigen Probleme. Hoffentlich hilft dies jemandem, Zeit bei der Fehlersuche in Bezug auf Verbindungsfehler oder SSL-Probleme zu sparen. Viel Spaß beim Versenden von E-Mails mit PowerShell!