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

VerifiedCLI 3.1.1 · Outlook, Gmail · last tested April 11, 2026

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 -Credential oder in PSCredential-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 | iex

Fü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." `
  --yes

Muster 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 $cred

Nachher (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>" `
  --yes

Muster 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 $cred

Nachher (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%." `
  --yes

Muster 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 25

Nachher (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." `
  --yes

Muster 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 $cred

Nachher (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 `
  --yes

Muster 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.

FunktionSend-MailMessageNylas CLI
TLS-SicherheitDefekt (veraltet)TLS 1.2+ erzwungen
AuthentifizierungBasic Auth / App-PasswörterOAuth2
Zugangsdaten in SkriptenJa (PSCredential / XML)Nein (OS-Schlüsselbund)
Gmail-UnterstützungApp-Passwort erforderlichOAuth2 integriert
Outlook / M365-UnterstützungBasic Auth (wird deaktiviert)OAuth2 integriert
HTML-Body-BodyAsHtml-FlagAutomatisch erkannt
Anhänge-AttachmentsLink senden oder Nylas API/SDK für MIME-Anhänge
E-Mail-PlanungNicht unterstützt--schedule
Posteingang lesenNicht unterstütztnylas email list
JSON-AusgabeNicht unterstützt--json
KalenderzugriffNicht unterstütztnylas 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.