Juli 8, 2026

Emails per PowerShell versenden

Auch hier führen viele Wege nach Rom. Ehrlich gesagt gehe ich immer noch oft den „alten“ Standardweg, funktioniert wunderbar mit Exchange Onprem:

# Variables to be used for the Email
$MailSubject = "TEST " + (Get-Random)
$MailFrom = "DoNotReply@domain.com"
$MailTo = "alexander@zarenko.net"
$Server = "exchange.domain.local"
$MailBody = "TEST Mail Body"

Send-MailMessage -From $MailFrom -To $MailTo -Subject $MailSubject -Body $MailBody -SmtpServer $Server

Hier ein Spezialbeispiel für den Versand via Azure Communication Services mit Port 587 und Credentials:

# Variables to be used for the Email
$MailSubject = "TEST " + (Get-Random)
$MailFrom = "DoNotReply@domain.com"
$MailTo = "alexander@zarenko.net"
$MailBody = "TEST Mail Body"

# Azure Communication Services specifics
$AcsResName = "comsvc-edge-new"
$AppId = "a3b2c0a7-5c19-4e1d-8e26-fb62e5a4d8ef"
$Tenant = "e9f11c4d-6b32-49df-8d42-3fd72c5db2cb"
$Secret = "4kT98~PqZHw11Abc92Lm7zeuP3Fg2ytYHaxXQbeta"
$Server = "smtp.azurecomm.net"

# Build username
$UserName = $AcsResName + "." + $AppId + "." + $Tenant
# Convert secret to SecureString
$SecurePassword = ConvertTo-SecureString $Secret -AsPlainText -Force
# Create credential object
$Credential = New-Object System.Management.Automation.PSCredential ($UserName, $SecurePassword)

# Send test email
Send-MailMessage -From $MailFrom -To $MailTo -Subject $MailSubject -Body $MailBody -SmtpServer $Server -Credential $Credential -Port 587 -UseSsl

Die Variante über .NET hat soweit ich weiß dieselbe Evolutionsstufe:

# Declare variables to be used for the Email
$MailSubject= "TEST " + (Get-Random)
$MailFrom="DoNotReply@domain.com"
$MailTo="alexander@zarenko.net"
$Server="exchange.domain.local"
$MailBody = "TEST Mail Body"

# Creates an SMTP Object and assigns an SMTP Address
$SmtpClient = New-Object system.net.mail.smtpClient
$SmtpClient.host = $Server

# Creates a new Mail Message Object. This is the object needed for the addressing email, subject, body, etc
$MailMessage = New-Object system.net.mail.mailmessage
$MailMessage.from = $MailFrom
$MailMessage.To.add($MailTo)
$MailMessage.IsBodyHtml = 0
$MailMessage.Subject = $MailSubject
$MailMessage.Body = $MailBody

# Actually Sends the Message
$SmtpClient.Send($MailMessage)

Letzteres habe ich zugegebenermaßen selbst auch nur geklaut 😀

Wenn es komplizierter wird oder neumodischer sein soll(te), bin ich früher gerne zu Mailozaurr (cooler Name :)) geschwenkt. Inzwischen bin ich davon allerdings wieder abgekommen, da ich zu viel Zeit mit Troubleshooting diverser Komponenten verbracht habe, die nicht unter meiner Kontrolle liegen. Deshalb habe ich mir mein eigenes Tool gebaut:

Send-SmtpOAuth.ps1

Wenn ihr Mails per SMTP über Exchange Online versenden wollt – und das modern und mit allen Schikanen, dann besucht gerne mein Github und ladet euch das Skript herunter. Im Readme.md steht alles , was man braucht. Besonders praktisch finde ich die Möglichkeit, verschiedene OAuth Flows testen zu können – mitunter hilfreich, um zu verstehen, was beispielsweise für die Anbindung eines Scan2Mail-Druckers an Exchange Online erforderlich ist.

Jetzt fehlt nur noch der Graph SendMail-Weg. Und vielleicht noch X andere Varianten, die mir gerade nicht einfallen. Stay tuned… 🙂

0 0 Bewertungen
Article Rating
Abonnieren
Benachrichtigen bei
guest
0 Comments
0
Deine Meinung würde uns sehr interessieren. Bitte kommentiere.x