Send Graph Mail
Zuletzt geändert: 14.04.2026 10:23

Übersicht

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:

  1. Service-Flow (Application Permission Mail.Send): Jedes Postfach im Tenant
  2. 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:

  1. 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

  2. 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.