Für diesen PowerShell-Befehl des Tages behandeln wir den PowerShell-Befehl Send-MailMessage. Dieser PowerShell-Befehl dient einem einzigen Zweck; das Versenden von E-Mails auf verschiedene Arten.
Weil der Send-MailMessage-Befehl auf so viele Arten E-Mails versenden kann, tauchen wir direkt ein und behandeln alle gängigen Beispiele, auf die Sie stoßen könnten. In diesem Artikel werden wir viele Beispiele behandeln, angefangen von den einfachsten bis hin zu Szenarien, die ich niemandem wünsche!
Dieser Beitrag ist eine großartige Ressource zum Lesezeichen setzen, falls Sie jemals auf Fälle stoßen, in denen Sie E-Mails mit PowerShell versenden müssen und die Syntax vergessen haben.
Der SMTP-Server
Alle E-Mails müssen über einen SMTP-Server über einen Server und einen Port gesendet werden. Um den zu verwendenden SMTP-Server anzugeben, verwenden Sie einen Parameter namens SMTPServer
, mit dem Sie den SMTP-Server angeben können, um eine Verbindung herzustellen und E-Mails weiterzuleiten. Dies ist jedoch nicht erforderlich.
Wenn Sie keinen Wert für den Parameter SMTPServer
angeben, wird der Wert verwendet, der in der Präferenzvariablen $PSEmailServer
gespeichert ist. Sie können diesem Variablen genauso einen Wert zuweisen wie jeder anderen Variablen auch.
Diese Variable bleibt jedoch nicht über PowerShell-Sitzungen hinweg erhalten. Das bedeutet, dass Sie sie jedes Mal neu definieren müssen, wenn eine neue PowerShell-Sitzung geöffnet wird. Aus diesem Grund empfehle ich entweder, sie zu definieren, indem Sie sie über Ihrer Send-MailMessage
-Referenz angeben, oder sie überhaupt nicht zu definieren. Stattdessen würde ich persönlich den Wert für den SMTPServer
-Parameter angeben. Auf diese Weise müssen Sie keine externe Variable verwalten, die sich möglicherweise ändert.
Port
Standardmäßig wird der Befehl versuchen, eine E-Mail über den SMTP-Server über Port 25 zu senden. Dies ist einfacher, unverschlüsselter SMTP. Heutzutage ist es jedoch üblicher, verschlüsselte E-Mails über SSL/TLS zu senden (diese Szenarien werden später behandelt).
Wenn Sie den Port von 25 ändern müssen, können Sie den Port
-Parameter verwenden.
Empfänger und Absender
Um E-Mails an verschiedene Empfänger über Methoden wie die Felder To, Cc und Bcc zu senden, hat der Befehl verschiedene Parameter, die dies ermöglichen.
Die Parameter To, Cc und Bcc im Send-Mailmessage-Befehl
Der Befehl hat drei Parameter, die jeweils mehrere Empfänger durch Kommas getrennt unterstützen, namens To
, Cc
und Bcc
.
Sie können Einzeladressen wie unten angegeben angeben.
Oder Sie können mehrere Empfänger für jeden Parameterwert angeben.
Der From-Parameter
Beim Versenden einer E-Mail können Sie auch den From
-Parameter angeben, der den Antwort-an-Header in der E-Mail festlegt. Dieser Parameter erlaubt nur eine Adresse. Wenn ein Empfänger sich entscheidet, auf die E-Mail zu antworten, wird diese E-Mail-Adresse die Adresse sein, an die die Antwort zurückkommt.
Standardmäßig wird bei Verwendung einer E-Mail-Adresse nur die E-Mail-Adresse im Feld FROM des Empfängers angezeigt. Wenn Sie jedoch einen Namen oder eine Art Label wie Service Account Mailbox angeben möchten, können Sie auch einen Namen und eine E-Mail-Adresse angeben, wie z.B.:
Bemerken Sie, dass der
Betreff
-Parameter verwendet wurde. Dieser Parameter ist immer erforderlich. Sie werden diesen Parameter in allen Beispielen sehen.
Nachrichtentext
Der Nachrichtentext
-Parameter ermöglicht es Ihnen, anzugeben, was sich im Nachrichtentext der E-Mail befinden soll. Am einfachsten können Sie einfach beliebigen Text angeben und das Cmdlet wird ihn als Klartext senden.
Senden von E-Mails mit HTML-Nachrichtentext
Sie können auch einen E-Mail-Nachrichtentext per HTML anstatt als Klartext senden. Verwenden Sie dazu denselben Nachrichtentext
-Parameter wie für Klartext, verwenden Sie jedoch HTML für den String und verwenden Sie den Schalterparameter BodyAsHtml
.
Hinweis in obigem Beispiel: Ich habe den Body-String in
@'
und'@
eingeschlossen. Dies wird als Here-String bezeichnet. Dadurch können Sie lange Zeichenketten definieren, die normalerweise in E-Mail-Bodies mit Wagenrücklaufzeichen enthalten sind. Here-Strings erhalten die Formatierung von Zeichenketten und sind eine großartige Möglichkeit, den E-Mail-Body zu definieren, insbesondere wenn er in HTML ist.
Kodierung
Wenn Sie Sonderzeichen im Betreff oder im Body Ihrer E-Mail haben, können Sie den Encoding
-Parameter verwenden. Dieser Parameter ermöglicht es Ihnen, den E-Mail-Betreff und -Body vor dem Versenden über den angegebenen Codierungstyp zu kodieren.
Sie haben hier ein paar Optionen:
- ASCII (Standard)
- UTF8
- UTF7
- UTF32
- Unicode
- BigEndianUnicode
- Standard
- OEM
Anhänge
Das Cmdlet kann auch eine oder mehrere Dateien anhängen. Dazu können Sie den Attachments
-Parameter verwenden und den Pfad zu den gewünschten Dateien angeben.
Sie können auch mehrere Anhänge über eine Sammlung angeben, indem Sie sie mit einem Komma trennen.
Der Attachments
-Parameter ermöglicht es Ihnen auch, Dateien über Cmdlets wie Get-Item
und Get-ChildItem
an das Cmdlet Send-MailMessage
zu übergeben.
Sichere und authentifizierte E-Mails
Standardmäßig sendet das Cmdlet E-Mails über unverschlüsselte SMTP-Kommunikation über Port 25. Es unterstützt jedoch auch das Senden von verschlüsselten E-Mails über SSL/TLS mit Benutzername und Passwort.
Wenn Sie versuchen, E-Mails über einen SMTP-Server weiterzuleiten, der eine Authentifizierung erfordert, schlägt der Befehl mit einer Fehlermeldung wie unten dargestellt fehl.
Um dies zu beheben, müssen Sie zuerst den Port (normalerweise 587 für TLS) und den UseSsl
-Parameter angeben. Dies teilt dem Cmdlet mit, dass versucht werden soll, eine Verbindung zum Port 587 des SMTP-Servers herzustellen und die gesamte Nachricht zu verschlüsseln. Sie müssen in der Regel (immer?) auch den Benutzernamen/Passwort angeben, um sich über den Credential
-Parameter am SMTP-Server anzumelden.
Oben greife ich auf ein Anmeldeinformationsobjekt (PSCredential) mit dem
Get-Credential
-Cmdlet zu. Dies stellt manchmal ein Problem dar, da es interaktiv ist und das Skript anhält, um nach Benutzername und Passwort zu fragen. Um dies zu verhindern, können Sie ein PSCredential-Objekt „on the fly“ erstellen.
A common email example is to use Gmail. Using the knowledge you’ve gained above, you can now easily send email through Gmail using the smtp.gmail.com SMTP server as shown below.
E-Mail-Priorität zuweisen
Eine Funktion von E-Mails, die ich persönlich gerne sterben lassen würde, ist die Möglichkeit, Prioritätsstufen den gesendeten E-Mails zuzuweisen. Diese Priorität wird dann vom E-Mail-Client auf verschiedene Weisen interpretiert.

Mit Send-MailMessage können Sie einer E-Mail drei verschiedene Prioritäten zuweisen.
- Normal (Standard)
- Hoch
- Niedrig
Aber bitte, um Himmels willen, denken Sie nicht, dass alle Ihre E-Mails von hoher Priorität sind!
Zustellungsbenachrichtigungen
Endlich können Sie Zustellungsbenachrichtigungen für E-Mails angeben. Zustellungsbenachrichtigungen sind das, was in einigen E-Mail-Clients als Lesebestätigungen bekannt ist. Zustellungsbenachrichtigungen ermöglichen es Ihnen, benachrichtigt zu werden, wenn die E-Mail vom Empfänger empfangen wird. Der Empfänger muss jedoch immer noch zustimmen.
Sie haben vier Optionen, wenn Sie Zustellungsbenachrichtigungen anfordern.
- Keine (Standard)
- Bei Erfolg (wenn die Zustellung erfolgreich ist)
- Bei Fehler (Benachrichtigung, wenn die Zustellung fehlschlägt)
- Verzögerung (wenn die E-Mail über einen SMTP-Server verzögert wird)
Sie können eine Zustellungsbenachrichtigungsoption angeben, indem Sie den Parameter DeliveryNotificationOptions
verwenden.
Sie können auch mehrere Zustellungsbenachrichtigungen gleichzeitig anfordern, indem Sie sie mit einem Komma trennen.
Zusammenfassung
In diesem Beitrag haben Sie alles über das Cmdlet Send-mailmessage und seine Funktionen gelernt. Wir haben dieses Cmdlet ausführlich behandelt und dabei jeden verfügbaren Parameter mit Beispielen erläutert. Ich hoffe, dieser Beitrag kann Ihnen als Referenz dienen, wenn Sie das Cmdlet Send-mailmessage verwenden.
Weitere Informationen
Schauen Sie sich unbedingt einige andere verwandte Beiträge an!