Met PowerShell een e-mail versturen, hiervoor kun je de Send-MailMessage cmdlet gebruiken, maar dat wordt door PowerShell afgeraden. Om op een veilige manier met PowerShell een SMTP e-mail te sturen moet je even een kleine functie in elkaar klussen. Lees gauw verder!
Het gebruik van Send-MailMessage
in PowerShell wordt afgeraden met de volgende melding:
WARNING: The command ‘Send-MailMessage’ is obsolete. This cmdlet does not guarantee secure connections to SMTP servers. While there is no immediate replacement available in PowerShell, we recommend you do not use Send-MailMessage at this time. See https://aka.ms/SendMailMessage for more information.
Maak daarom je eigen script om veilig met PowerShell e-mail te sturen.
De volgende PowerShell functie stuurt een e-mail via jouw SMTP-server, als je de functie uitvoert met argumenten From (afzendadres) en To (ontvangersadres). Het maakt een TLS-beveiligde verbinding met smtp.vevida.com, pas dit aan naar jouw omgeving. Het afzendadres wordt gebruikt om in te loggen op de SMTP-server en de opdrachtprompt vraagt je om je SMTP e-mail wachtwoord. Dat wachtwoord wordt dus niet in een opdrachtengeschiedenisbestand opgeslagen, extra veilig.
Function Send-MyMail($from, $to) {
$EmailFrom = "${from}"
$EmailTo = "${to}"
$Subject = "Test email"
$Body = "Body van de e-mail"
$SMTPServer = "smtp.vevida.com"
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 25)
$SMTPClient.EnableSsl = $true
$ww = read-host -AsSecureString "Provide your email password."
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("${from}", "$(${ww} | convertfrom-securestring -AsPlainText)");
$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)
}
Zoals je ziet staat dit bol van de aannames, bijvoorbeeld dat jouw afzendadres $from
ook gebruikt wordt om in te loggen op de SMTP-server. Die gegevens kunnen best verschillen. Ook poort 25 (regel 7) kan anders zijn.
Dit is vrij rudimentair, maar gebruik deze functie bijvoorbeeld als raamwerk (framework) voor jouw eigen functie of zelfs PowerShell module. Handig in je DevOps scripts voor reporting als je met PowerShell Windows Updates installeert.
Je gebruikt dit op de PowerShell opdrachtprompt als volgt:
PS C:\Users\janreilink> Send-MyMail from@example.com test@example.net
Provide your email password.: *****************
Als het inloggen met TLS op de SMTP-server lukt met from@example.com en het wachtwoord, dan krijgt test@example.net een e-mail van from@example.com, met “Body van de e-mail” als bericht.
Ook kun je MailKit aanspreken in je scripts, je las al eerder over MailKit in mijn post SMTP e-mail versturen met .NET.