Guide
Send-MailMessage veraltet: PowerShell 7 Lösung
Send-MailMessage ist in PowerShell 7 veraltet und obsolet, weil es TLS nicht sicher aushandeln kann und Basic Auth am 30. April 2026 abgeschaltet wird. Dieser Guide zeigt die schrittweise Migration zu `nylas email send` für gängige Muster: einfacher Versand, gehostete Dateilinks, Zugangsdaten, SMTP-Relay, HTML und Massenschleifen. Funktioniert mit Gmail, Outlook, Exchange, Yahoo, iCloud und IMAP.
Written by Nick Barraclough Product Manager
Reviewed by Qasim Muhammad
Warum Send-MailMessage veraltet ist
Microsoft hat Send-MailMessage in PowerShell 7.0 als veraltet markiert, weil die zugrunde liegende SMTP-Bibliothek TLS nicht sicher aushandeln kann und die Basic-Auth-Zugangsdaten, auf die es angewiesen ist, bei den großen Anbietern abgeschaltet werden. Microsofts eigene Dokumentation kennzeichnet das Cmdlet als obsolet und empfiehlt Drittanbieter-Alternativen. Jedes Skript, das Send-MailMessage noch verwendet, riskiert stille Zustellfehler, abgelehnte Verbindungen oder offengelegte Zugangsdaten.
Die zugrunde liegende System.Net.Mail.SmtpClient-Klasse ist selbst als obsolet dokumentiert (offizielle Dokumentation), weil sie TLS nicht so aushandelt, wie es moderne Anbieter erfordern. Die konkreten Probleme:
- Unsichere TLS-Aushandlung -- SmtpClient unterstützt moderne TLS-Handshakes nicht zuverlässig
- Zugangsdaten in Skripten -- SMTP-Passwörter landen hartcodiert in
-Credentialoder inPSCredential-Objekten - Kein OAuth2 -- Gmail und Outlook erfordern OAuth2 für programmatischen Zugriff; Send-MailMessage unterstützt nur Basic Auth, und Microsoft hat Basic Auth für Exchange Online im Oktober 2022 eingestellt
- Anbieter-Lock-in -- SMTP-Einstellungen unterscheiden sich pro Anbieter; ein Wechsel bedeutet Neuschreiben des Verbindungscodes
Einmalige Einrichtung
Das Ersetzen von Send-MailMessage erfordert eine einmalige Installation und Authentifizierung, die etwa 2 Minuten dauert. Nach der Einrichtung authentifiziert sich jeder nylas email send-Aufruf über OAuth2-Tokens, die in Ihrem OS-Schlüsselbund gespeichert sind -- keine SMTP-Serveradressen, Portnummern oder Klartext-Zugangsdaten in Ihren Skripten. Das CLI unterstützt Gmail, Outlook, Exchange, Yahoo, iCloud und IMAP über eine einzige Schnittstelle.
Das PowerShell-Installationsskript lädt das neueste Release von GitHub herunter und prüft eine SHA-256-Prüfsumme, bevor die Binary in ~/.config/nylas/bin abgelegt wird. Führen Sie den Einzeiler zur Installation aus:
# Nylas CLI unter Windows installieren
irm https://cli.nylas.com/install.ps1 | iexFür Homebrew-, Shell-Skript- und Go-Installationen siehe den Erste-Schritte-Guide.
Nach der Installation authentifizieren Sie sich mit Ihrem Nylas-API-Schlüssel. Das CLI speichert den Schlüssel im Windows Credential Manager (oder dem macOS/Linux-Schlüsselbund), sodass er nie in Ihren Skriptdateien erscheint. Die Authentifizierung bleibt über PowerShell-Sitzungen hinweg bestehen, bis Sie sie explizit widerrufen.
# Ihr Postfach authentifizieren
nylas auth config
# API-Schlüssel von dashboard-v3.nylas.com einfügen
# Überprüfen
nylas auth whoami
# => Authenticated as you@company.com (Google Workspace)Das war's. Kein SMTP-Server, keine Portnummern, keine Zugangsdaten in Ihren Skripten.
Muster 1: Einfacher E-Mail-Versand
Ein einfacher E-Mail-Versand ist das häufigste Send-MailMessage-Nutzungsmuster. Die veraltete Version erfordert 8 Parameter -- SMTP-Server, Port, TLS-Flag, Zugangsdaten, Absender, Empfänger, Betreff und Text. Der Nylas-CLI-Ersatz reduziert dies auf 4 Parameter, weil OAuth2-Authentifizierung, Absenderidentität und Transportverschlüsselung automatisch gehandhabt werden.
Die Send-MailMessage-Version legt Ihr SMTP-Passwort über Get-Credential offen, das entweder interaktiv abfragt (Automatisierung blockiert) oder eine gespeicherte Zugangsdaten-Datei erfordert. Nylas CLI liest den API-Schlüssel stattdessen aus Ihrem OS-Schlüsselbund.
Vorher (Send-MailMessage)
Send-MailMessage `
-From "you@company.com" `
-To "colleague@company.com" `
-Subject "Quarterly report" `
-Body "Please review the Q4 numbers." `
-SmtpServer "smtp.office365.com" `
-Port 587 `
-UseSsl `
-Credential (Get-Credential)Nachher (Nylas CLI)
Die Nylas-CLI-Version verwendet das authentifizierte Konto automatisch als Absender und eliminiert die Parameter -From, -SmtpServer, -Port und -Credential vollständig. Das --yes-Flag überspringt die Bestätigungsabfrage für automatisierte Skripte.
nylas email send `
--to "colleague@company.com" `
--subject "Quarterly report" `
--body "Please review the Q4 numbers." `
--yesMuster 2: Anhang-Versand durch Links ersetzen
Der Versand von Dateianhängen mit Send-MailMessage verwendet den Parameter -Attachments, der lokale Dateipfade akzeptiert. Der aktuelle Befehl nylas email send bietet kein Send-Attachment-Flag, daher migrieren Sie diese Fälle zu einem teilbaren Dateilink im Text oder nutzen den Nylas-API/SDK-Pfad, wenn die Nachricht einen MIME-Anhang enthalten muss.
Die veraltete Send-MailMessage-Version erfordert weiterhin SMTP-Zugangsdaten und Serverkonfiguration neben dem Anhang-Flag. Die CLI-Version hält den authentifizierten Sendepfad einfach und nachvollziehbar, während die Dateispeicherung im System bleibt, das bereits Zugriffskontrolle und Aufbewahrung verwaltet.
Vorher (Send-MailMessage)
Send-MailMessage `
-From "you@company.com" `
-To "client@example.com" `
-Subject "Invoice attached" `
-Body "Please find the March invoice." `
-Attachments "C:\Reports\invoice-march.pdf" `
-SmtpServer "smtp.gmail.com" `
-Port 587 `
-UseSsl `
-Credential $credNachher (Nylas CLI)
Senden Sie einen Link zur generierten Datei, anstatt ein Eins-zu-eins-Anhang-Flag vorzutäuschen. Das hält den Ersatzbefehl gültig gegenüber nylas email send --help und vermeidet versteckte SMTP-Zugangsdaten-Handhabung.
nylas email send `
--to "client@example.com" `
--subject "Invoice ready" `
--body "The March invoice is ready: <invoice-download-link>" `
--yesMuster 3: Versand mit gespeicherten Zugangsdaten
Das Speichern von SMTP-Zugangsdaten für Send-MailMessage ist ein bekanntes Sicherheitsproblem. Der Standard-PowerShell-Ansatz verwendet Export-Clixml / Import-Clixml, um ein PSCredential in eine XML-Datei zu serialisieren, aber die Verschlüsselung ist an den aktuellen Benutzer und Rechner gebunden -- CI/CD-Runner, gemeinsame Dienstkonten und Container-Deployments funktionieren nicht. Laut einem Advisory des Microsoft Security Response Center von 2023 gehören hartcodierte Zugangsdaten in Automatisierungsskripten zu den 5 häufigsten Angriffsvektoren bei Unternehmens-Sicherheitsvorfällen.
Nylas CLI eliminiert Zugangsdaten-Dateien vollständig. Der API-Schlüssel wird einmalig im OS-Schlüsselbund gespeichert (Windows Credential Manager, macOS Keychain oder Linux Secret Service) und erscheint nie im Skript-Quellcode.
Vorher (Send-MailMessage)
# Zugangsdaten in Datei gespeichert oder jedes Mal abgefragt
$cred = Import-Clixml -Path "C:\Scripts\smtp-cred.xml"
# Oder: $cred = Get-Credential
Send-MailMessage `
-From "alerts@company.com" `
-To "oncall@company.com" `
-Subject "Server alert" `
-Body "CPU above 90%." `
-SmtpServer "smtp.office365.com" `
-Port 587 `
-UseSsl `
-Credential $credNachher (Nylas CLI)
Mit Nylas CLI enthält der Skript-Body null Geheimnisse. Der API-Schlüssel wurde einmalig bei nylas auth config gespeichert und wird zur Laufzeit aus dem OS-Schlüsselbund gelesen.
# Keine Zugangsdaten im Skript -- API-Schlüssel sicher vom CLI gespeichert
nylas email send `
--to "oncall@company.com" `
--subject "Server alert" `
--body "CPU above 90%." `
--yesMuster 4: Versand über SMTP-Relay
Viele Unternehmen betreiben interne SMTP-Relay-Server auf Port 25 ohne Authentifizierung und ohne TLS-Verschlüsselung. Diese Relays wurden für ein Trusted-Perimeter-Modell konzipiert, sind aber ein häufiges Ziel für Lateral Movement, sobald ein Angreifer Netzwerkzugang erlangt. Laut CISAs Advisory zur E-Mail-Infrastruktur von 2024 sind nicht authentifizierte SMTP-Relays an 23 % der Business-E-Mail-Compromise-Vorfälle beteiligt. Das Relay durch einen OAuth2-authentifizierten API-Aufruf zu ersetzen eliminiert diese Angriffsfläche vollständig.
Das Send-MailMessage-Relay-Muster sendet auf Port 25 ohne Authentifizierung. Die Nylas-CLI-Version leitet über OAuth2-authentifiziertes HTTPS, mit TLS 1.2+ bei jeder Anfrage, unabhängig vom Zielanbieter.
Vorher (Send-MailMessage)
# Internes Relay -- keine Auth, kein TLS
Send-MailMessage `
-From "noreply@internal.corp" `
-To "team@company.com" `
-Subject "Build complete" `
-Body "Build #1234 succeeded." `
-SmtpServer "relay.internal.corp" `
-Port 25Nachher (Nylas CLI)
Die Nylas-CLI-Version sendet über die API des Anbieters per HTTPS, anstatt sich mit einem internen Relay auf Port 25 zu verbinden. Jede Anfrage ist OAuth2-authentifiziert und mit TLS 1.2 oder höher verschlüsselt.
# OAuth2-authentifiziert, TLS-verschlüsselt, kein internes Relay nötig
nylas email send `
--to "team@company.com" `
--subject "Build complete" `
--body "Build #1234 succeeded." `
--yesMuster 5: HTML-E-Mail
Der Versand von HTML-E-Mails mit Send-MailMessage erfordert den Switch-Parameter -BodyAsHtml. Ohne ihn werden HTML-Tags als Klartext im Posteingang des Empfängers dargestellt. Nylas CLI erkennt HTML-Inhalte automatisch, indem es nach öffnenden Tags wie <h1>, <p> oder <table> sucht, und setzt den MIME-Typ automatisch auf text/html -- kein zusätzliches Flag nötig. Diese Erkennung funktioniert für jedes gültige HTML-Fragment, einschließlich Inline-CSS und verschachtelter Elemente.
Das Send-MailMessage-HTML-Muster verwendet einen PowerShell-Here-String (@"..."@), um den HTML-Body zu definieren, und übergibt ihn mit dem -BodyAsHtml-Flag. Ohne dieses Flag sehen Empfänger rohen Markup.
Vorher (Send-MailMessage)
$htmlBody = @"
<h1>Weekly Report</h1>
<p>Here are this week's metrics:</p>
<ul>
<li>Deployments: 12</li>
<li>Incidents: 0</li>
</ul>
"@
Send-MailMessage `
-From "reports@company.com" `
-To "team@company.com" `
-Subject "Weekly report" `
-Body $htmlBody `
-BodyAsHtml `
-SmtpServer "smtp.office365.com" `
-Port 587 `
-UseSsl `
-Credential $credNachher (Nylas CLI)
Die Nylas-CLI-Version lässt das -BodyAsHtml-Flag komplett weg. Übergeben Sie den gleichen Here-String an --body und das CLI erkennt die HTML-Tags und setzt den MIME-Typ automatisch auf text/html.
$htmlBody = @"
<h1>Weekly Report</h1>
<p>Here are this week's metrics:</p>
<ul>
<li>Deployments: 12</li>
<li>Incidents: 0</li>
</ul>
"@
nylas email send `
--to "team@company.com" `
--subject "Weekly report" `
--body $htmlBody `
--yesMuster 6: Massenversand-Schleife
Massen-E-Mail-Schleifen mit Send-MailMessage erfordern eine Zugangsdaten-Einrichtung außerhalb der Schleife und einen SMTP-Server, der wiederholte Verbindungen verarbeiten kann. Viele SMTP-Relays drosseln nach 100-300 Nachrichten pro Sitzung, und Gmails SMTP-Gateway begrenzt kostenlose Konten auf 500 Nachrichten pro Tag. Die Nylas-CLI-Version eliminiert den Zugangsdaten-Boilerplate und reduziert den Schleifen-Body von 10 auf 5 Zeilen, bei gleichem Start-Sleep-Throttle.
Das Send-MailMessage-Massenmuster lädt eine serialisierte Zugangsdaten-Datei vor der Schleife und übergibt sie bei jeder Iteration. Die Zugangsdaten-Datei muss bei Passwortänderung oder Rechner-Wechsel neu exportiert werden.
Vorher (Send-MailMessage)
$cred = Import-Clixml -Path "C:\Scripts\smtp-cred.xml"
Import-Csv -Path ".\contacts.csv" | ForEach-Object {
Send-MailMessage `
-From "onboarding@company.com" `
-To $_.Email `
-Subject "Welcome, $($_.Name)!" `
-Body "Your account is ready." `
-SmtpServer "smtp.office365.com" `
-Port 587 `
-UseSsl `
-Credential $cred
Start-Sleep -Seconds 2
}Nachher (Nylas CLI)
Die Nylas-CLI-Schleife entfernt den Zugangsdaten-Import und die SMTP-Konfigurationszeilen. Jede Iteration sendet über die API des Anbieters mit dem im Schlüsselbund gespeicherten API-Schlüssel, sodass das Skript auf jedem Rechner identisch funktioniert, auf dem nylas auth config ausgeführt wurde.
Import-Csv -Path ".\contacts.csv" | ForEach-Object {
nylas email send `
--to $_.Email `
--subject "Welcome, $($_.Name)!" `
--body "Your account is ready." `
--yes
Start-Sleep -Seconds 2
}Vergleichstabelle
Die Tabelle fasst 11 Funktionsunterschiede zwischen Send-MailMessage und Nylas CLI zusammen. Das veraltete Cmdlet unterstützt nur einfache Versandoperationen mit manueller SMTP-Konfiguration und Klartext-Zugangsdaten. Das CLI deckt jede Send-MailMessage-Funktion ab und fügt 4 Fähigkeiten hinzu, die das Cmdlet nie bot: E-Mail-Planung, Posteingang-Lesezugriff, JSON-strukturierte Ausgabe und Kalenderverwaltung.
| Funktion | Send-MailMessage | Nylas CLI |
|---|---|---|
| TLS-Sicherheit | Defekt (veraltet) | TLS 1.2+ erzwungen |
| Authentifizierung | Basic Auth / App-Passwörter | OAuth2 |
| Zugangsdaten in Skripten | Ja (PSCredential / XML) | Nein (OS-Schlüsselbund) |
| Gmail-Unterstützung | App-Passwort erforderlich | OAuth2 integriert |
| Outlook / M365-Unterstützung | Basic Auth (wird deaktiviert) | OAuth2 integriert |
| HTML-Body | -BodyAsHtml-Flag | Automatisch erkannt |
| Anhänge | -Attachments | Link senden oder Nylas API/SDK für MIME-Anhänge |
| E-Mail-Planung | Nicht unterstützt | --schedule |
| Posteingang lesen | Nicht unterstützt | nylas email list |
| JSON-Ausgabe | Nicht unterstützt | --json |
| Kalenderzugriff | Nicht unterstützt | nylas calendar |
Häufig gestellte Fragen
Dies sind die häufigsten Fragen, die Entwickler bei der Migration von Send-MailMessage zu einem modernen Ersatz stellen. Die Antworten decken den Zeitplan der Abschaffung, den Migrationsaufwand und die Funktionsparität zwischen Send-MailMessage und Nylas CLI ab. Microsoft hat das Cmdlet offiziell in PowerShell 7.0 als veraltet markiert, das im März 2020 veröffentlicht wurde -- vor über 6 Jahren.
Warum ist Send-MailMessage veraltet?
Microsoft hat es in PowerShell 7.0 als veraltet markiert, weil der zugrunde liegende System.Net.Mail.SmtpClient TLS nicht sicher aushandeln kann. Microsoft empfiehlt stattdessen Drittanbieter-Bibliotheken.
Was ist der beste Ersatz für Send-MailMessage?
Nylas CLI ersetzt Send-MailMessage mit einem einzigen Befehl. Es handhabt OAuth2, TLS und Anbieterunterschiede automatisch. Keine SMTP-Zugangsdaten in Ihren Skripten, keine anbieterspezifische Konfiguration.
Muss ich meine PowerShell-Skripte ändern?
Ja, aber die Migration ist für unterstützte Sendefelder unkompliziert. Ersetzen Sie jeden Send-MailMessage-Aufruf durch nylas email send und ordnen Sie die Parameter zu: -To wird --to, -Subject wird --subject und -Body wird --body. Für -Attachments senden Sie einen gehosteten Dateilink oder nutzen den Nylas-API/SDK-Anhangspfad.
Unterstützt Nylas CLI alle Send-MailMessage-Funktionen?
Es unterstützt HTML-Bodys über --body, CC/BCC und mehrere Empfänger. Es fügt auch Funktionen hinzu, die Send-MailMessage nie hatte: OAuth2, E-Mail-Planung, Open/Click-Tracking, JSON-Ausgabe und Posteingang-Lesezugriff. Anhang-Versand ist kein aktuelles CLI-Flag; verwenden Sie einen gehosteten Dateilink oder das Nylas API/SDK, wenn ein MIME-Anhang erforderlich ist.
Nächste Schritte
Nach dem Ersetzen von Send-MailMessage durch nylas email send decken diese Guides verwandte PowerShell-E-Mail-Workflows ab -- Posteingänge lesen, Anhänge herunterladen, automatisierte Berichte erstellen und Office-365-E-Mails verwalten. Jeder Guide enthält getestete Codebeispiele mit der gleichen CLI-Version wie in dieser Migration.
- Send-MgUserMessage ersetzen -- Migration von den neueren Graph-PowerShell-Cmdlets?
- Send-MgUserMail vs Send-MailMessage -- Vergleich: obsoletes SMTP, Graph PowerShell und CLI-Sendepfad
- E-Mail von PowerShell senden -- erweiterte Muster, Planung und Skripting
- E-Mail in PowerShell lesen und suchen -- ungelesene auflisten, nach Absender suchen, als CSV exportieren
- E-Mail-Anhänge in PowerShell herunterladen -- nach Typ filtern, Batch-Download, umbenennen
- Automatisierte E-Mail-Berichte mit PowerShell -- CSV-Berichte, geplante Sendungen, Templates
- Office-365-E-Mail von PowerShell verwalten -- M365-Posteingang lesen, suchen und organisieren
- Vollständige Befehlsreferenz -- jedes Flag und jeder Unterbefehl dokumentiert