Voor deze PowerShell-cmdlet van de dag behandelen we de PowerShell-cmdlet Send-MailMessage. Deze PowerShell-cmdlet heeft maar één doel; het versturen van e-mails op verschillende manieren.
Aangezien er zoveel manieren zijn waarop de Send-MailMessage-cmdlet e-mailberichten kan versturen, laten we meteen beginnen met het behandelen van alle gangbare voorbeelden die je tegen kunt komen. In dit artikel zullen we veel voorbeelden behandelen, variërend van de eenvoudigste tot en met enkele scenario’s waar ik niemand mee wil belasten!
Deze post zal een handige bron zijn om te bookmarken voor het geval dat je situaties tegenkomt waarin je e-mail moet versturen met PowerShell en de syntaxis vergeet.
De SMTP-server
Alle e-mails moeten ergens via een server en een poort naar een SMTP-server gaan. Om de SMTP-server te specificeren, gebruik je een parameter genaamd SMTPServer
waarmee je de SMTP-server kunt opgeven om een verbinding tot stand te brengen en mail via door te sturen. Het is echter niet verplicht.
Als je geen waarde opgeeft voor de parameter SMTPServer
, wordt de waarde die is opgeslagen in de voorkeursvariabele $PSEmailServer
gebruikt. Je kunt een waarde toewijzen aan deze variabele zoals je dat bij elke andere variabele zou doen.
Echter, deze variabele blijft niet behouden tussen PowerShell-sessies. Dit betekent dat je het elke keer opnieuw moet definiëren wanneer een nieuwe PowerShell-sessie wordt geopend. Om deze reden raad ik aan om het ofwel te gebruiken door het boven je `Send-MailMessage`-referentie te definiëren, of het helemaal niet te definiëren. In plaats daarvan zou ik persoonlijk de waarde van de `SMTPServer` parameter verstrekken. Op deze manier hoef je geen externe variabele te beheren die mogelijk verandert.
Poort
Standaard zal de cmdlet proberen een e-mail te verzenden via de SMTP-server op poort 25. Dit is gewoon, ongecodeerd SMTP. Tegenwoordig is het echter gebruikelijker om versleutelde e-mails te verzenden via SSL/TLS (we zullen deze scenario’s later behandelen).
Als je de poort wilt wijzigen van 25, kun je de `Port` parameter gebruiken.
Ontvangers en Afzenders
Om een e-mail naar verschillende ontvangers te sturen via methoden zoals de Ontvanger, Cc en Bcc velden, heeft de cmdlet diverse parameters om dit mogelijk te maken.
De To-, Cc- en Bcc-parameters in de Send-Mailmessage Cmdlet
De cmdlet heeft drie parameters die elk meerdere ontvangers ondersteunen, gescheiden door een komma genaamd `To`, `Cc` en `Bcc`.
Je kunt enkele adressen specificeren zoals hieronder.
Of je kunt meerdere ontvangers specificeren voor elke parameterwaarde.
De Van-parameter
Bij het verzenden van een e-mail kun je ook de Van
parameter specificeren, die de antwoord-naar header in de e-mail zal instellen. Deze parameter staat slechts één adres toe. Als een ontvanger ervoor kiest om op de e-mail te antwoorden, zal dit het e-mailadres zijn waarnaar het antwoord terugkomt.
Standaard zal het gebruik van een e-mailadres eenvoudigweg het e-mailadres tonen in het VAN-veld van de ontvanger. Als je echter een naam of een soort label zoals Service Account Mailbox wilt specificeren, kun je ook een naam en een e-mailadres opgeven zoals:
Merk op dat de
Onderwerp
parameter is gebruikt. Deze parameter is altijd vereist. Je zult zien dat deze parameter wordt gebruikt in alle voorbeelden.
Body
De Body
parameter stelt je in staat om te specificeren wat er in de e-mailbody zal staan. Op zijn eenvoudigst kun je elk gewenst tekst opgeven en zal de cmdlet het via platte tekst verzenden.
Het verzenden van HTML-body e-mails
Je kunt ook een e-mailbody verzenden via HTML in plaats van platte tekst. Om dat te doen, gebruik je dezelfde Body
parameter als je zou doen met platte tekst, maar gebruik HTML voor de string en gebruik de BodyAsHtml
switch-parameter.
Let op in het bovenstaande voorbeeld, heb ik de body string ingesloten tussen
@'
en'@
. Dit wordt een here string genoemd. Hiermee kunt u lange strings definiëren die typisch zijn voor e-mailinhoud die regeleinden bevat. Here strings behouden de opmaak van strings en zijn een uitstekende manier om de e-mailinhoud te definiëren, vooral als deze in HTML is.
Codering
Als u speciale tekens in het onderwerp of de inhoud van uw e-mail heeft, kunt u de Encoding
-parameter gebruiken. Deze parameter stelt u in staat om het e-mailonderwerp en de inhoud te coderen via het opgegeven coderingstype voordat u ze verzendt.
U heeft hier een paar opties:
- ASCII (standaard)
- UTF8
- UTF7
- UTF32
- Unicode
- BigEndianUnicode
- Standaard
- OEM
Bijlagen
De cmdlet kan ook een of meer bestanden bijvoegen. Om dit te doen, kunt u de Attachments
-parameter gebruiken en het pad naar de bestand(en) opgeven die u wilt bijvoegen.
U kunt ook meerdere bijlagen opgeven via een collectie door ze te scheiden met een komma.
De Attachments
-parameter stelt u ook in staat om bestanden via cmdlets zoals Get-Item
en Get-ChildItem
door te sturen naar de Send-MailMessage
-cmdlet.
Veilige en geauthenticeerde e-mail
Standaard verstuurt de cmdlet e-mails via onversleutelde SMTP-communicatie over poort 25. Het ondersteunt echter ook het verzenden van versleutelde e-mails via SSL/TLS met een gebruikersnaam en wachtwoord.
Als je probeert e-mails te relayeren via een SMTP-server die authenticatie vereist, mislukt de opdracht met een foutmelding zoals hieronder weergegeven.
Om dit te verhelpen, moet je eerst de poort specificeren (meestal 587 voor TLS) en de parameter UseSsl
. Hiermee vertel je de cmdlet om te proberen verbinding te maken met poort 587 op de SMTP-server en het volledige bericht te versleutelen. Je moet waarschijnlijk (altijd?) ook de gebruikersnaam/wachtwoord specificeren om je te authenticeren bij de SMTP-server met behulp van de parameter Credential
.
Hier pak ik een referentie (PSCredential) object met behulp van de
Get-Credential
cmdlet. Dit kan soms een probleem opleveren omdat het interactief is en het script stopt om te vragen om een gebruikersnaam en wachtwoord. Om dit te voorkomen, kun je een PSCredential-object on-the-fly maken.
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.
Toewijzen van e-mailprioriteit
Hoewel het een functie van e-mail is waarvan ik persoonlijk zou willen dat deze verdwijnt, kun je prioriteitsniveaus toewijzen aan de e-mails die je verzendt via de Prioriteit
-parameter. Deze prioriteit wordt vervolgens op verschillende manieren geïnterpreteerd door de e-mailclient.

Send-mailmessage stelt je in staat om een e-mail te voorzien van drie verschillende prioriteiten.
- Normaal (standaard)
- Hoog
- Laag
Maar alsjeblieft, voor de liefde van God, denk niet dat al je e-mails van hoge prioriteit zijn!
Bezorgmeldingen
Eindelijk kun je bezorgmeldingen specificeren voor e-mails. Bezorgmeldingen zijn wat meestal bekend staat als leesbevestigingen in sommige e-mailclients. Bezorgmeldingen stellen je in staat om op de hoogte te worden gesteld als/wanneer de e-mail door de ontvanger is ontvangen. De ontvanger moet het echter nog steeds toestaan.
Je hebt vier opties bij het aanvragen van bezorgmeldingen.
- Geen (standaard)
- OnSuccess (wanneer de e-mail succesvol is bezorgd)
- OnFailure (melden als de bezorging niet succesvol is)
- Vertraging (wanneer de e-mail vertraagd is via een SMTP-server)
Je kunt een bezorgmeldingsoptie specificeren door de parameter DeliveryNotificationOptions
te gebruiken.
Je kunt ook meerdere bezorgmeldingen tegelijk aanvragen door ze te scheiden met een komma.
Samenvatting
In deze post heb je alles geleerd over de Send-mailmessage cmdlet en wat het kan. We hebben deze cmdlet uitgebreid behandeld met elk van zijn parameters samen met voorbeelden. Ik hoop dat deze post als referentie voor je kan dienen bij het gebruik van de Send-mailmessage cmdlet.
Verder lezen
Zorg ervoor dat je ook enkele andere gerelateerde posts bekijkt!