Send-GraphMail #
ÜBERSICHT #
Versendet E-Mails über die Microsoft Graph API.
SYNTAX #
Send-GraphMail [-Token] <string> [[-From] <string>] [[-AuthFlow] <string>] [[-Conn] <__ComObject>]
[-To] <string[]> [[-Cc] <string[]>] [[-Bcc] <string[]>] [-Subject] <string> [[-HtmlBody]
<string>] [[-Attachments] <string[]>] [[-InlineImages] <object[]>] [<CommonParameters>]
BESCHREIBUNG #
Send-GraphMail versendet HTML-formatierte E-Mails über die Microsoft Graph API. Das Access-Token wird extern über Get-GraphToken beschafft und als Parameter übergeben.
Ohne -From wird /me/sendMail verwendet (eigenes Postfach des angemeldeten Benutzers). Mit -From wird /users/{email}/sendMail verwendet. Das funktioniert in zwei Szenarien:
- Service-Flow (Application Permission Mail.Send): Jedes Postfach im Tenant
- User-Flow mit Vollzugriff: Shared Mailboxes (support@, info@) auf die der Benutzer “Lesen und Verwalten” (Full Access) Berechtigung hat
VORAUSSETZUNGEN FÜR SHARED MAILBOXES (Microsoft 365 Admin Center) #
Damit ein Benutzer über eine Shared Mailbox senden kann:
Exchange Admin Center (https://admin.exchange.microsoft.com) -> Empfänger -> Postfächer -> Shared Mailbox auswählen -> Delegierung -> “Senden als”: Benutzer hinzufügen -> Delegierung -> “Lesen und Verwalten (Vollzugriff)”: Benutzer hinzufügen
Azure Portal -> App-Registrierungen -> App auswählen -> API-Berechtigungen -> “Mail.Send” (delegiert) muss vorhanden sein
Exchange Online ist in allen Microsoft 365 Business- und Enterprise-Plänen enthalten. Jeder Microsoft 365 Administrator kann diese Berechtigungen vergeben.
PARAMETER #
-Token #
Type: string
Access-Token (Bearer) für die Graph API. Wird über Get-GraphToken beschafft.
-From #
Type: string
Absender-Adresse. Nutzt den Endpunkt /users/{From}/sendMail. Funktioniert mit Service-Flow Token (Application Permission) und mit User-Flow Token wenn der Benutzer Vollzugriff auf das Postfach hat (z.B. Shared Mailboxes wie support@, info@). Ohne -From wird /me/sendMail verwendet (eigenes Postfach).
Ist -From nicht gesetzt und wurde -Conn übergeben, zieht die Funktion die Absenderadresse aus dem zum -AuthFlow passenden Registry-Subkey nach (UserFlow\From bzw. ServiceFlow\From). Im Service-Flow ist eine Absenderadresse Pflicht – fehlt sie in Parameter und Registry, bricht die Funktion mit klarem Fehler ab.
-AuthFlow #
Type: string
Default: 'User'
Steuert, aus welchem Registry-Subkey der Absender (From) gelesen wird, wenn -From nicht explizit übergeben wird. ‘User’ liest aus \SYSTEM\Devices\EMail\GraphAPI\UserFlow, ‘Service’ aus \ServiceFlow. Erfordert -Conn für den Registry-Zugriff. Default: ‘User’.
-Conn #
Type: __ComObject
ADODB-Verbindungsobjekt zur EULANDA-Datenbank für den From-Lookup aus der SQL-Registry. Optional. Ohne -Conn wird ausschließlich der über -From übergebene Wert genutzt (bzw. /me/sendMail wenn -From leer).
-To #
Type: string[]
Array mit Empfängeradressen (mindestens eine). Erlaubt auch komma-/semikolongetrennten String.
-Cc #
Type: string[]
Array mit CC-Empfängern (optional).
-Bcc #
Type: string[]
Array mit BCC-Empfängern (optional).
-Subject #
Type: string
Betreff der E-Mail.
-HtmlBody #
Type: string
Default: ''
HTML-formatierter Inhalt der E-Mail (optional, Default: leer).
-Attachments #
Type: string[]
Array mit Dateipfaden für optionale Anhänge.
-InlineImages #
Type: object[]
Array mit Inline-Bild-Objekten. Jedes Objekt benötigt mindestens die Eigenschaft Path. Optionale Eigenschaften: ContentId, FileName, MediaType.
AUSGABEN #
void
Erfolg oder Fehler werden als Konsolenausgabe dargestellt.
BEISPIELE #
# Service-Flow: Rechnung per E-Mail versenden
$token = Get-GraphToken -ServiceFlow `
-TenantId '54197dd8-9c79-46ca-9d1f-a6c260a7cfab' `
-ClientId 'c081dca9-2f08-475a-8691-5339e99ab42c' -ClientSecret 'Ihr~ClientSecret-hier'
Send-GraphMail -Token $token -From 'no-reply@firma.de' `
-To 'kunde@beispiel.de' -Subject 'Ihre Rechnung' `
-HtmlBody '<b>Siehe Anhang</b>' -Attachments 'C:\Temp\rechnung.pdf'
# User-Flow: E-Mail über eigenes Postfach senden
$token = Get-GraphToken -UserScope 'Mail.Send offline_access'
Send-GraphMail -Token $token -To 'empfaenger@firma.de' `
-Subject 'Test' -HtmlBody '<b>Hallo!</b>'
# User-Flow: Als Shared Mailbox senden (Vollzugriff nötig)
$token = Get-GraphToken -UserScope 'Mail.Send offline_access'
Send-GraphMail -Token $token -From 'support@firma.de' `
-To 'kunde@beispiel.de' -Subject 'Support-Anfrage' `
-HtmlBody '<b>Wir kümmern uns darum.</b>'
# Service-Flow mit CC und Inline-Bild
$token = Get-GraphToken -ServiceFlow `
-TenantId '54197dd8-9c79-46ca-9d1f-a6c260a7cfab' `
-ClientId 'c081dca9-2f08-475a-8691-5339e99ab42c' -ClientSecret 'Ihr~ClientSecret-hier'
$inlineImg = @{ Path = 'C:\Temp\logo.png'; ContentId = 'logo1' }
Send-GraphMail -Token $token -From 'info@firma.de' `
-To 'kunde@beispiel.de' -Cc 'chef@firma.de' `
-Subject 'Newsletter' `
-HtmlBody 'Unser Logo: <img src="cid:logo1">' `
-InlineImages @($inlineImg)
# Server-/Batch-Versand über SQL-Registry: weder From noch Credentials
# müssen im Skript stehen. Alles kommt aus \GraphAPI\ServiceFlow.
$conn = New-Object -ComObject ADODB.Connection
$conn.Open('File Name=C:\Eulanda\EULANDA_1 Mustermann.udl')
$token = Get-GraphToken -ServiceFlow -Conn $conn
Send-GraphMail -Token $token -AuthFlow Service -Conn $conn `
-To 'kunde@beispiel.de' -Subject 'Ihre Rechnung' `
-HtmlBody '<b>Siehe Anhang</b>' -Attachments 'C:\Temp\rechnung.pdf'
HINWEISE #
Ersetzt Send-GraphMailService und Send-GraphMailUser (ab v1.1). Das Token wird nicht mehr intern geholt, sondern extern über Get-GraphToken.