> For the complete documentation index, see [llms.txt](https://docs.realmjoin.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.realmjoin.com/de/dev-reference/report-functions/send-rjrbreportemail.md).

# Send-RjRbReportEmail

Markenbezogene HTML-Berichts-E-Mails aus Azure Automation-Runbooks über Microsoft Graph mithilfe von Markdown-Inhalten senden.

## Überblick

`Send-RjRbReportEmail` ist der Standard-Helfer zum Versenden von Bericht-E-Mails aus RealmJoin-Reporting-Runbooks. Er nimmt Markdown-Inhalt entgegen, wandelt ihn in eine responsiv gestaltete HTML-E-Mail im RealmJoin-Branding um, fügt optionale Dateien und eingebettete Branding-Grafiken (Header/Fußzeile) an und sendet das Ergebnis über Microsoft Graph `sendMail` Endpunkt.

> **In dieser Version umbenannt.** Die Funktion wurde umbenannt von `Send-RjReportEmail` zu `Send-RjRbReportEmail` zur Vereinheitlichung der Namensgebung mit dem Rest des Moduls (`*-RjRb*`). Der alte Name `Send-RjReportEmail` wird als abwärtskompatibler Alias exportiert, sodass bestehende Runbooks unverändert weiter funktionieren — neue Runbooks sollten jedoch `Send-RjRbReportEmail`.

Wichtige Merkmale:

* **Markdown rein, HTML raus** — Runbooks erstellen den Berichtstext in Markdown; die Funktion rendert ihn zu thematisch gestaltetem HTML, das in Outlook Classic, New Outlook, Outlook Web, mobilen Clients und im Dunkelmodus funktioniert.
* **Eine E-Mail pro Empfänger** — wenn mehrere Empfänger angegeben werden, sendet die Funktion an jede Adresse eine einzelne Nachricht statt einer einzigen Mail an mehrere Empfänger. Dies ist ein datenschutzfreundliches Design mit standardmäßigem BCC.
* **Inline-Branding für Kopf- und Fußzeile** — mitgelieferte PNG-Assets werden als CID-Anhänge gesendet und vom eingebetteten HTML referenziert. Beide können überschrieben oder vollständig unterdrückt werden.
* **Anpassbare Vorlagenfarben** — die Akzent- und Textfarbe der Vorlage können pro Aufruf überschrieben werden, sodass Bericht-E-Mails dem Corporate Design eines Kunden folgen können.
* **Integrierte Größenprüfung für Anhänge** — ein optional kleinerer Fallback-Anhangssatz wird automatisch gesendet, wenn der reguläre Satz das Größenbudget überschreitet oder der Sendeversuch fehlschlägt.
* **Selbstverbindend** — wenn keine Graph-Sitzung aktiv ist, ruft die Funktion transparent `Connect-RjRbGraph` (oder `Connect-MgGraph -Identity` wenn `-UseNativeGraphRequest` gesetzt ist).
* **Robust** — fehlgeschlagene Lesevorgänge für Anhänge, ungültige Bildüberschreibungen, ungültige Farben oder sendMail-Fehler pro Empfänger werden gemeldet, beenden aber den gesamten Batch nicht, sofern nicht *alle* Empfänger fehlschlagen.

Zentralisierte E-Mail-Einstellungen (Absenderadresse, Service-Desk-Informationen) sind dokumentiert in [Runbook-Berichtseinstellungen](/de/automatisierung/runbooks/runbook-report-settings.md) — dieses Dokument konzentriert sich auf das Aufrufen der Funktion aus einem Runbook.

## Voraussetzungen

### Absenderpostfach

Ein lizenziertes Microsoft 365-Postfach (typischerweise ein dediziertes freigegebenes Postfach wie `realmjoin-report@contoso.com`) ist als die `Von` Adresse. Die verwaltete Identität des Automation Accounts muss berechtigt sein, über Microsoft Graph im Namen dieses Postfachs zu senden `Mail.Send` Anwendungsberechtigung (eingeschränkt über RBAC für Applications, falls Sie die Identität auf ein einzelnes Postfach beschränken möchten).

> **Der Absender darf keine Microsoft 365-Gruppe sein.** Die Funktion sendet über den Graph-Endpunkt `/users/{EmailFrom}/sendMail` — eine Microsoft 365-Gruppe ist kein Benutzerobjekt, daher schlägt der Aufruf fehl. Verwenden Sie ein Benutzer- oder freigegebenes Postfach.
>
> Microsoft 365-Gruppenadressen als **Empfänger** werden technisch akzeptiert, aber **nicht empfohlen**: Die Nachricht erreicht möglicherweise nur das Gruppenpostfach (Mitglieder erhalten nur dann eine persönliche Kopie, wenn sie der Gruppe folgen), die Zustellungsverwaltung der Gruppe kann den Absender ablehnen, und Zustellfehler werden dem Absenderpostfach nur als NDR angezeigt — das Runbook selbst meldet weiterhin Erfolg. Verwenden Sie vorzugsweise einzelne Postfachadressen.

### Graph-Berechtigungen

| Szenario                                | Erforderliche Berechtigung                                  |
| --------------------------------------- | ----------------------------------------------------------- |
| Standard (`Invoke-RjRbRestMethodGraph`) | `Mail.Send` (Anwendung) im Absenderpostfach                 |
| Mit `-UseNativeGraphRequest`            | Gleich — der Aufruf trifft weiterhin `/users/{id}/sendMail` |

### Modulverbindung

Standardmäßig verwendet die Funktion `Invoke-RjRbRestMethodGraph` aus diesem Modul. Wenn keine Verbindung aktiv ist, verbindet sie sich automatisch über `Connect-RjRbGraph`. Wenn `-UseNativeGraphRequest` gesetzt ist, prüft die Funktion stattdessen `Get-MgContext` und ruft `Connect-MgGraph -Identity -NoWelcome` bei Bedarf auf.

## Schnellstart

Der minimal erforderliche Aufruf benötigt nur Absender, Empfänger, Betreff und den Markdown-Text:

```powershell
Send-RjRbReportEmail `
    -EmailFrom "realmjoin-report@contoso.com" `
    -EmailTo   "alice@contoso.com" `
    -Subject   "Weekly Report" `
    -MarkdownContent @"
# Wöchentlicher Bericht

Hallo Alice,

hier sind die Zahlen dieser Woche:

- Neue Geräte registriert: **42**
- Lizenzkonformität: **98%**
"@
```

Dadurch wird eine vollständig gebrandete RealmJoin-E-Mail mit Standard-Kopf- und Fußzeile, Unterstützung für Hell-/Dunkelmodus und dem Mandanten-/Versionsblock in der Fußzeile erstellt.

## Parameter

### Erforderlich

| Parameter         | Typ            | Beschreibung                                                                                                                                                                                                                                                                                                  |
| ----------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `EmailFrom`       | `Zeichenfolge` | Benutzerprinzipalname oder Objekt-ID des Absenderpostfachs. Wird verwendet als `/users/{id}/sendMail`. Muss ein Benutzer- oder freigegebenes Postfach sein — eine Microsoft 365-Gruppe ist kein Benutzerobjekt und das Senden schlägt fehl.                                                                   |
| `EmailTo`         | `Zeichenfolge` | Empfängeradresse. **Einzelne Zeichenfolge** — mehrere Adressen werden als durch Kommas getrennte Liste übergeben, siehe unten. Adressen von Microsoft-365-Gruppen werden akzeptiert, aber nicht empfohlen — die Zustellung an Mitglieder ist nicht garantiert und Fehler sind für das Runbook nicht sichtbar. |
| `Betreff`         | `Zeichenfolge` | Betreffzeile. Wird außerdem in das HTML eingefügt `<title>` -Element.                                                                                                                                                                                                                                         |
| `MarkdownContent` | `Zeichenfolge` | Berichtstext in Markdown. Siehe [Markdown-Unterstützung](#markdown-support) für die unterstützte Syntax.                                                                                                                                                                                                      |

### Optional — Inhalt

| Parameter           | Typ              | Standard | Beschreibung                                                                                                                                                                                                             |
| ------------------- | ---------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `Anhänge`           | `Zeichenfolge[]` | `@()`    | Lokale Dateipfade zum Anhängen. Fehlende Dateien werden protokolliert und übersprungen, nicht lesbare Dateien erzeugen eine Warnung, verhindern aber nicht das Senden. Der MIME-Typ wird aus der Dateiendung abgeleitet. |
| `saveToSentItems`   | `bool`           | `$true`  | Wenn `$true` die gesendete Nachricht im *Gesendete Elemente*gespeichert bleibt. Setzen Sie auf `$false` für Berichte mit hohem Volumen, um das Postfach nicht zu füllen.                                                 |
| `TenantDisplayName` | `Zeichenfolge`   | —        | Wird im Mandanten-Infofeld angezeigt, das am Ende des Inhaltsbereichs eingebettet ist.                                                                                                                                   |
| `Berichtsversion`   | `Zeichenfolge`   | —        | Wird im Mandanten-Infofeld angezeigt (verwenden Sie semantische Versionszeichenfolgen, Buildnummern oder einen Runbook-Namen plus Datum).                                                                                |

### Optional — Branding

| Parameter        | Typ            | Standard                         | Beschreibung                                                                                                                                                                                                                                                                                                                                   |
| ---------------- | -------------- | -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Kopfzeilenbild` | `Zeichenfolge` | mitgeliefert `Assets/Header.png` | Lokaler Dateipfad zu einer PNG/JPG/GIF-Datei, die die Standardgrafik der Kopfzeile überschreibt. **Das Runbook muss jede URL/jeden Blob vorher in eine lokale Datei auflösen** (z. B. über `Get-AzStorageBlobContent`). Fehlende/nicht lesbare Überschreibungen fallen auf die mitgelieferte Standardgrafik zurück und geben eine Warnung aus. |
| `Fußzeilenbild`  | `Zeichenfolge` | mitgeliefert `Assets/Footer.png` | Gleiche Behandlung wie `Kopfzeilenbild`. Die Fußzeile wird als ein einzelnes anklickbares Bild gerendert — jeder Branding-Text, jedes Logo oder jede URL muss in die PNG eingebettet sein.                                                                                                                                                     |
| `Fußzeilenlink`  | `Zeichenfolge` | `https://www.realmjoin.com`      | URL, die als `href` und `title` des Anchors, der das Fußzeilenbild umschließt.                                                                                                                                                                                                                                                                 |
| `NoHeader`       | `Schalter`     | aus                              | Unterdrückt die Kopfzeilengrafik vollständig. Falls kombiniert mit `Kopfzeilenbild`, wird eine Warnung ausgegeben und die Überschreibung ignoriert.                                                                                                                                                                                            |
| `NoFooter`       | `Schalter`     | aus                              | Unterdrückt die Fußzeilengrafik und ihren Link vollständig. Falls kombiniert mit `Fußzeilenbild` oder einer benutzerdefinierten `Fußzeilenlink`, wird eine Warnung ausgegeben und diese Werte werden ignoriert.                                                                                                                                |
| `Akzentfarbe`    | `Zeichenfolge` | `#f8842c`                        | *Neu in 0.8.9.* 6-stellige hexadezimale Farbe für Tabellenkopfzeilen, Aktionsschaltflächen und die Akzentrahmen der Infofelder. Ein leerer oder fehlerhafter Wert erzeugt eine Warnung und fällt auf den Standard zurück.                                                                                                                      |
| `Textfarbe`      | `Zeichenfolge` | `#011e33`                        | *Neu in 0.8.9.* 6-stellige hexadezimale Farbe für Fließtext, Überschriften, Listeneinträge und Code. Gleiches Fallback-Verhalten wie bei `Akzentfarbe`.                                                                                                                                                                                        |

**Empfohlene Bildabmessungen:** 750 × 200 px PNG. Das entspricht der Breite des E-Mail-Containers und den mitgelieferten Standardwerten. Deutlich andere Seitenverhältnisse können auf schmalen Ansichten verzerrt wirken. Jede Grafik sollte deutlich unter 3 MB bleiben — Graph begrenzt die gesamte `sendMail` Anfrage auf 4 MB, und eine Warnung wird ausgegeben, wenn eines der Bilder 3 MB überschreitet.

**Farben:** ohne `Akzentfarbe`/`Textfarbe` ist das generierte HTML Byte für Byte identisch mit früheren Modulversionen — die Standardwerte sind RealmJoin-Orange und Marineblau. Statusfarben (Grün/Rot/Bernstein) und neutrale Grautöne sind absichtlich nicht parametrierbar, da sie Bedeutung vermitteln. Prüfen Sie benutzerdefinierte Farben sowohl im Hell- als auch im Dunkelmodus: die Inhaltskarte bleibt im Dunkelmodus weiß, daher wird eine sehr helle Textfarbe unleserlich.

### Optional — Anhangsgrößenprüfung

*Neu in 0.8.9.* Graph lehnt die gesamte `sendMail` Anfrage ab, sobald die Nachricht etwa 4 MB überschreitet. Anstatt den Bericht fehlschlagen zu lassen, kann die Funktion auf einen kleineren Anhangssatz zurückfallen. Diese Logik war zuvor als Inline-Runbook-Helfer dupliziert `Send-RjRbGuardedReportEmail` und ist nun Teil der Funktion selbst.

| Parameter                 | Typ              | Standard                   | Beschreibung                                                                                                                                                                                                                                                                                         |
| ------------------------- | ---------------- | -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `FallbackAttachments`     | `Zeichenfolge[]` | —                          | Kleinerer Anhangssatz, der verwendet wird, wenn der reguläre Satz `MaxAttachmentBytes`überschreitet, oder wenn das Senden mit dem regulären Satz für alle Empfänger fehlschlägt. Ohne diesen Parameter gibt es keinen Fallback, und ein fehlgeschlagener Sendeversuch löst sofort eine Ausnahme aus. |
| `FallbackMarkdownContent` | `Zeichenfolge`   | Wert von `MarkdownContent` | Textkörper, der verwendet wird, wenn der Fallback-Satz gesendet wird — verwenden Sie ihn, um zu erklären, welche Dateien weggelassen wurden und wie man sie erhält.                                                                                                                                  |
| `MaxAttachmentBytes`      | `lang`           | `2.5MB`                    | Rohes Größenbudget für den regulären Anhangssatz. Bleibt nach Base64-Kodierung (+33 %), HTML-Textkörper und eingebetteten Branding-Bildern sicher unter dem etwa 4-MB-Graph-Limit. Wird nur ausgewertet, wenn `FallbackAttachments` angegeben ist.                                                   |

Die Prüfung läuft in zwei Stufen:

1. **Vor dem Senden** — wenn der reguläre Satz das Budget überschreitet, wird der Fallback-Satz direkt gesendet und eine Meldung nennt beide Größen.
2. **Nach einem fehlgeschlagenen Sendeversuch** — wenn das Senden mit dem regulären Satz für *alle* Empfänger fehlschlägt, wird vor dem Auslösen einer Ausnahme ein erneuter Versuch mit dem Fallback-Satz unternommen.

### Optional — Transport

| Parameter               | Typ        | Standard | Beschreibung                                                                                                                                                                                                                                       |
| ----------------------- | ---------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `UseNativeGraphRequest` | `Schalter` | aus      | Sendet über `Invoke-MgGraphRequest` (erfordert `Microsoft.Graph` -Modul und eine `Connect-MgGraph` -Sitzung) statt `Invoke-RjRbRestMethodGraph`. Verwenden Sie dies, wenn das Runbook auf dem nativen SDK statt auf dem RealmJoin-Wrapper basiert. |

## Verwendungsbeispiele

### Mehrere Empfänger

`EmailTo` akzeptiert eine einzelne Zeichenfolge mit einer oder mehreren durch Kommas getrennten Adressen. Jede Adresse wird getrimmt, leere Einträge werden entfernt, und **pro Empfänger wird eine einzelne E-Mail gesendet** — die Empfänger sehen einander nicht.

```powershell
Send-RjRbReportEmail `
    -EmailFrom "realmjoin-report@contoso.com" `
    -EmailTo   "alice@contoso.com, bob@contoso.com, team-lead@contoso.com" `
    -Subject   "Monthly Inventory" `
    -MarkdownContent $reportMd
```

### Mit Anhängen und Mandantenmetadaten

```powershell
$csvPath = Join-Path $env:TEMP 'devices.csv'
$exportData | Export-Csv -Path $csvPath -NoTypeInformation -Encoding UTF8

Send-RjRbReportEmail `
    -EmailFrom         "realmjoin-report@contoso.com" `
    -EmailTo           "it-reports@contoso.com" `
    -Subject           "Device Inventory — $(Get-Date -Format 'yyyy-MM-dd')" `
    -MarkdownContent   $reportMd `
    -Attachments       @($csvPath, "$env:TEMP\summary.xlsx") `
    -TenantDisplayName "Contoso Ltd" `
    -ReportVersion     "DeviceInventory v1.4.2"
```

Die angehängten Dateien werden zusätzlich dazu, dass sie der Nachricht als echte Anhänge hinzugefügt werden, unten im E-Mail-Text in einem Feld „Angehängte Dateien“ aufgelistet.

### Benutzerdefiniertes Branding für Kopf- und Fußzeile

Bringen Sie Ihr eigenes Branding ein, indem Sie die Assets zuerst in einen lokalen Pfad herunterladen und dann die resultierenden Pfade übergeben. Die Funktion ruft URLs nicht selbst ab.

```powershell
# Branding-Assets aus Azure Blob Storage in den Temp-Ordner des Runbooks auflösen
$headerPath = Join-Path $env:TEMP 'contoso-header.png'
$footerPath = Join-Path $env:TEMP 'contoso-footer.png'

Get-AzStorageBlobContent -Container 'branding' -Blob 'header.png' -Destination $headerPath -Force | Out-Null
Get-AzStorageBlobContent -Container 'branding' -Blob 'footer.png' -Destination $footerPath -Force | Out-Null

Send-RjRbReportEmail `
    -EmailFrom        "realmjoin-report@contoso.com" `
    -EmailTo          "alice@contoso.com" `
    -Subject          "Branded Report" `
    -MarkdownContent  $reportMd `
    -HeaderImage      $headerPath `
    -FooterImage      $footerPath `
    -FooterLink       "https://intranet.contoso.com/it-reports"
```

Wenn `$headerPath` fehlt oder nicht lesbar ist, ist der Aufruf trotzdem erfolgreich — der mitgelieferte RealmJoin-Standard wird verwendet und eine Warnung protokolliert.

### Benutzerdefinierte Vorlagenfarben

Passen Sie die E-Mail an das Corporate Design eines Kunden an. Beide Parameter sind unabhängig — wenn nur die Akzentfarbe überschrieben wird, bleibt die Standard-Textfarbe erhalten:

```powershell
Send-RjRbReportEmail `
    -EmailFrom       "realmjoin-report@contoso.com" `
    -EmailTo         "alice@contoso.com" `
    -Subject         "Branded Report" `
    -MarkdownContent $reportMd `
    -AccentColor     "#0052cc" `
    -TextColor       "#1a1a2e"
```

Ein ungültiger Wert (zum Beispiel `blau` oder `#05c`) führt nicht dazu, dass das Senden fehlschlägt: Eine Warnung nennt den Parameter, und die Standardfarbe wird verwendet.

### Große Berichte mit einem Fallback-Anhangssatz

Erzeugen Sie eine CSV- und eine Excel-Arbeitsmappe, fallen Sie aber auf die Arbeitsmappe allein zurück, wenn das Paar das Größenbudget überschreitet:

```powershell
$sizeHint = "Der CSV-Export wurde ausgelassen, weil die Anhänge das E-Mail-Größenlimit überschritten haben. Die Excel-Arbeitsmappe enthält die vollständigen Daten."

Send-RjRbReportEmail `
    -EmailFrom                "realmjoin-report@contoso.com" `
    -EmailTo                  "it-reports@contoso.com" `
    -Subject                  "Device Inventory" `
    -MarkdownContent          $reportMd `
    -Attachments              @($csvPath, $xlsxPath) `
    -FallbackAttachments      @($xlsxPath) `
    -FallbackMarkdownContent  ($reportMd + "`n`n> **Hinweis:** $sizeHint")
```

Runbooks, die von dem Inline-Helfer migrieren `Send-RjRbGuardedReportEmail` können diese Funktion entfernen und den Aufruf umbenennen in `Send-RjRbReportEmail` — die Parameternamen (`Anhänge`, `FallbackAttachments`, `FallbackMarkdownContent`, `MaxAttachmentBytes`) bleiben unverändert.

### Einfacher Inhalt (ohne Kopf-/Fußzeile)

Für Benachrichtigungen im Alarmstil, die nicht wie eine Marketing-E-Mail aussehen sollen:

```powershell
Send-RjRbReportEmail `
    -EmailFrom       "realmjoin-report@contoso.com" `
    -EmailTo         "oncall@contoso.com" `
    -Subject         "[ALERT] License threshold exceeded" `
    -MarkdownContent "## Lizenzschwelle überschritten`n`nSiehe Dashboard für Details." `
    -NoHeader `
    -NoFooter
```

### Verwenden des nativen Microsoft.Graph-SDKs

Wenn das Runbook bereits über `Connect-MgGraph` (verwaltete Identität) authentifiziert ist und Sie den RealmJoin-Wrapper nicht einbinden möchten:

```powershell
Connect-MgGraph -Identity -NoWelcome

Send-RjRbReportEmail `
    -EmailFrom             "realmjoin-report@contoso.com" `
    -EmailTo               "alice@contoso.com" `
    -Subject               "Native Graph send" `
    -MarkdownContent       $reportMd `
    -UseNativeGraphRequest
```

### Berichtstext aus einer Datei lesen

Für größere Berichte erzeugen Sie das Markdown in eine `.md` Datei und lesen Sie es ein:

```powershell
$reportMd = Get-Content -Path .\generated-report.md -Raw

Send-RjRbReportEmail `
    -EmailFrom       "realmjoin-report@contoso.com" `
    -EmailTo         "alice@contoso.com" `
    -Subject         "Weekly Report" `
    -MarkdownContent $reportMd
```

### Aktionsschaltflächen (Call-to-Action)

Rendern Sie eine oder mehrere Branding-Schaltflächen, indem Sie `{button}` an einen Markdown-Link anhängen. Schaltflächen, die in derselben Zeile platziert werden, werden zu einer einzigen Zeile gruppiert:

```powershell
$reportMd = @"
# Zugriffsanfrage

Eine neue Zugriffsanfrage für ein Gerät wartet auf Ihre Entscheidung.

[Approve](https://portal.contoso.com/approve/123){button} [Reject](https://portal.contoso.com/reject/123){button}
"@

Send-RjRbReportEmail `
    -EmailFrom       "realmjoin-report@contoso.com" `
    -EmailTo         "approver@contoso.com" `
    -Subject         "Action required: device access request" `
    -MarkdownContent $reportMd
```

Jede Schaltfläche ist ein normaler Hyperlink, der als CTA gestaltet ist — sicher in allen Clients, mit abgerundeten Ecken in modernen Clients und eckigen Ecken in Outlook Classic.

## Markdown-Unterstützung

Die Funktion wird mit einem integrierten, leichtgewichtigen Markdown-→-HTML-Konverter ausgeliefert. **Es ist kein externes Markdown-Modul erforderlich.** Unterstützte Syntax:

| Markdown                                      | Hinweise                                                                                                                                                                                                                                                                                                                                                                                   |
| --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `# … ######` Überschriften                    | Alle sechs Ebenen. Leerzeichen nach `#` ist optional. `h1` erhält eine Unterstreichung; der Abstand ist für Outlook optimiert.                                                                                                                                                                                                                                                             |
| `**bold**`, `*italic*`, `~~strike~~`          | Nur inline (darf sich nicht über mehrere Zeilen erstrecken).                                                                                                                                                                                                                                                                                                                               |
| `` `inline code` ``                           | Gerendert als `<code>` mit hellgrauem Hintergrund.                                                                                                                                                                                                                                                                                                                                         |
| lang ... abgegrenzte Codeblöcke               | Das Sprach-Tag bleibt erhalten als `class="language-…"`. Toleriert auch fehlerhafte Umrandungen mit nur einem Backtick.                                                                                                                                                                                                                                                                    |
| `[text](url)` Links                           | In neuem Tab öffnen mit `noopener noreferrer`.                                                                                                                                                                                                                                                                                                                                             |
| `[label](url){button}` Link-Buttons           | Wird statt eines einfachen Links als markenbezogene orangefarbene Call-to-Action-Schaltfläche gerendert. Mehrere `{button}` Links auf der **gleichen Zeile** werden nebeneinander in einer Reihe gerendert (die Breite wird gleichmäßig aufgeteilt). Abgerundete Ecken werden in modernen Clients (New Outlook, OWA, mobil) angezeigt; Outlook Classic (Word-Engine) rendert eckige Ecken. |
| `![alt](url)` Bilder                          | Eingefügt als `<img>` (keine Inline-Anhang-Magie — die URL muss für den E-Mail-Client erreichbar sein).                                                                                                                                                                                                                                                                                    |
| `- Element` / `1. Element` Listen             | Verschachtelte Listen werden pro Ebene durch Einrückung mit 2 Leerzeichen unterstützt. Das Mischen von nummerierten und ungeordneten Listen schließt die vorherige Liste.                                                                                                                                                                                                                  |
| Mehrzeilige Listeneinträge                    | Eine eingerückte, nicht leere Zeile direkt unter einem `<li>` wird in denselben Eintrag übernommen mit einem `<br>` weichen Zeilenumbruch — kein Grund, jeden Eintrag in einer Zeile zu halten.                                                                                                                                                                                            |
| `- [ ]` / `- [x]` Aufgabenlisten              | Gerendert als `☐` / `☑` Unicode-Glyphe (grün, wenn aktiviert). `<input type="checkbox">` wird absichtlich vermieden, da Outlook Classic Formularsteuerelemente entfernt. Großes `[X]` gilt ebenfalls als aktiviert.                                                                                                                                                                        |
| `> Blockzitat`                                | Gerendert mit farbigem linken Rand und schattiertem Hintergrund.                                                                                                                                                                                                                                                                                                                           |
| `> [!NOTE\|TIP\|IMPORTANT\|WARNING\|CAUTION]` | Hinweise im GitHub-Stil. Die erste Zeile des Blockzitats ist allein der Marker, die übrigen `>`mit - eingeleiteten Zeilen bilden den Inhalt. Jeder Typ erhält seine eigene Akzentfarbe, Glyphe und Titelleiste.                                                                                                                                                                            |
| `---`, `***`, `___`                           | Horizontale Linie.                                                                                                                                                                                                                                                                                                                                                                         |
| `\|col\|col\|` Tabellen                       | Standard-Tabellen mit Pipes und `:---`, `:---:`, `---:` Ausrichtungsspezifizierern. Kopfzeile + Trennzeichen erforderlich.                                                                                                                                                                                                                                                                 |
| `\\` Maskierung                               | `\\*`, `\|` usw. werden berücksichtigt, sodass wörtliche Markdown-Zeichen ausgegeben werden können.                                                                                                                                                                                                                                                                                        |

Nicht unterstützte Elemente sind Fußnoten, Definitionslisten und HTML-Durchleitung — beschränken Sie das Markdown auf die obige Tabelle.

## Verhalten & Fehlerbehandlung

### Empfänger-Parsing

`EmailTo` wird an Kommas getrennt, jeder Eintrag wird zugeschnitten und leere Einträge werden verworfen. Wenn die resultierende Liste leer ist, löst die Funktion aus `Im Parameter EmailTo wurden keine gültigen E-Mail-Empfänger gefunden.` bevor ein Graph-Aufruf ausgeführt wird.

### Fehler pro Empfänger

Jeder Empfänger wird unabhängig gesendet. Die Funktion verfolgt Erfolge und Fehler:

* Wenn **mindestens ein** Versand erfolgreich ist, andere jedoch fehlschlagen, wird eine Warnung mit den fehlgeschlagenen Adressen ausgegeben; die Funktion kehrt normal zurück.
* Wenn **alle** Versendungen fehlschlagen, löst die Funktion aus `E-Mail konnte nicht an alle Empfänger gesendet werden: …` damit das Runbook mit einer deutlichen Fehlermeldung fehlschlägt.

### Anlagenfehler

* Fehlende Dateien (Pfad existiert nicht) — ausführlich protokolliert, still übersprungen.
* Vorhandene, aber nicht lesbare Dateien (gesperrt, Zugriffsverweigerung) — Warnung ausgegeben, übersprungen, der Rest des Aufrufs wird fortgesetzt.
* Das Feld „Attached Files“ am Ende der E-Mail listet nur Anlagen auf, die erfolgreich gelesen wurden.

### Fehler bei Bildüberschreibungen

Beide `Kopfzeilenbild` und `Fußzeilenbild` fallen bei jedem Fehler auf die mitgelieferten Standardwerte zurück (fehlende Datei, I/O-Fehler oder eine Datei, die kein gültiges Bild ist). Eine Warnung beschreibt den Fehler und nennt, welcher Standardwert verwendet wurde.

Seit 0.8.9 wird das Bildformat aus der **Dateisignatur** (Magic Bytes) statt aus der Dateiendung bestimmt. Eine Datei mit dem Namen `.png` aber tatsächlich eine HTML-Fehlerseite enthält — ein häufiger Fall, wenn ein Download stillschweigend ein Fehlerdokument zurückliefert — wird nun mit einer Warnung abgelehnt, statt einen fehlerhaften Inline-Anhang zu erzeugen. Umgekehrt wird ein gültiges PNG mit irreführender Dateiendung akzeptiert und korrekt typisiert.

### Ungültige Farben

`Akzentfarbe` und `Textfarbe` werden geprüft gegen `^#[0-9A-Fa-f]{6}$`. Ein nicht übereinstimmender Wert erzeugt eine Warnung mit Nennung des Parameters, und der Versand wird mit der Standardfarbe fortgesetzt. Farben sind niemals ein Grund, warum ein Bericht fehlschlägt.

### Gesamtegrößenlimit

Graph begrenzt `sendMail` Anfragen zusammen auf ca. 4 MB (HTML-Body + alle Anlagen, base64-kodiert). Die Funktion gibt eine Warnung aus, wenn eines der Branding-Bilder 3 MB überschreitet.

Wenn `FallbackAttachments` bereitgestellt wird, behandelt die oben im Parameterabschnitt beschriebene Größenprüfung für Anlagen übergroße Nutzlasten automatisch. Ohne ein Fallback-Set schlägt eine übergroße Anfrage im Graph-Aufruf fehl; erwägen Sie:

* Bereitstellung eines `FallbackAttachments` Sets (zum Beispiel die Excel-Arbeitsmappe ohne die rohen CSV-Dateien).
* Große Daten stattdessen über den Storage Account-Kanal hochzuladen — siehe [Runbook-Berichtseinstellungen](/de/automatisierung/runbooks/runbook-report-settings.md#storage-account-delivery).
* Verlinken auf extern gehostete Anlagen statt sie einzubetten.
* Tabellarische Daten komprimieren (`Compress-Archive`) vor dem Anhängen.

## Integration mit Runbook-Berichtseinstellungen

Berichts-Runbooks codieren die Absenderadresse oder das Branding nicht fest ein: Sie deklarieren ausgeblendete Parameter, die das RealmJoin-Portal aus dem zentralen Anpassungs-JSON vorbefüllt. Die verfügbaren Einstellungen sind dokumentiert in [Runbook-Berichtseinstellungen](/de/automatisierung/runbooks/runbook-report-settings.md).

Die Bindung erfolgt im `param()` Block über `Use-RJInterface -Type Setting`, und die Parameter sind markiert als `"Hide": true` im `.INPUTS RunbookCustomization` Block, damit sie das Formular im Portal nicht überladen:

```powershell
param(
    [ValidateScript( { Use-RJInterface -Type Setting -Attribute "RJReport.EmailSender" -Value $_ } )]
    [string]$EmailFrom,

    [ValidateScript( { Use-RJInterface -Type Setting -Attribute "RJReport.Branding.HeaderImageUrl" -Value $_ } )]
    [string]$BrandingHeaderImageUrl,

    [ValidateScript( { Use-RJInterface -Type Setting -Attribute "RJReport.Branding.FooterImageUrl" -Value $_ } )]
    [string]$BrandingFooterImageUrl,

    [ValidateScript( { Use-RJInterface -Type Setting -Attribute "RJReport.Branding.FooterLink" -Value $_ } )]
    [string]$BrandingFooterLink,

    [ValidateScript( { Use-RJInterface -Type Setting -Attribute "RJReport.Branding.AccentColor" -Value $_ } )]
    [string]$BrandingAccentColor,

    [ValidateScript( { Use-RJInterface -Type Setting -Attribute "RJReport.Branding.TextColor" -Value $_ } )]
    [string]$BrandingTextColor
)

if (-not $EmailFrom) {
    throw "Kein EmailSender konfiguriert. Siehe https://docs.realmjoin.com/automation/runbooks/runbook-report-settings für Einrichtungsanweisungen."
}

# Branding-Bilder einmal pro Lauf herunterladen und validieren; gibt nur die Schlüssel zurück
# die erfolgreich aufgelöst wurden, sodass nicht gesetzte Einstellungen auf die Standardwerte zurückfallen.
$brandingMailParams = Get-RjRbBrandingMailParams `
    -HeaderImageUrl $BrandingHeaderImageUrl `
    -FooterImageUrl $BrandingFooterImageUrl `
    -FooterLink     $BrandingFooterLink `
    -AccentColor    $BrandingAccentColor `
    -TextColor      $BrandingTextColor

Send-RjRbReportEmail `
    -EmailFrom         $EmailFrom `
    -EmailTo           $RecipientParameter `
    -Subject           $Subject `
    -MarkdownContent   $reportMd `
    -TenantDisplayName $TenantDisplayName `
    -ReportVersion     "MyReport v1.0" `
    @brandingMailParams
```

Siehe [Get-RjRbBrandingMailParams](/de/dev-reference/report-functions/get-rjrbbrandingmailparams.md) für die Regeln zu Download, Validierung und Bereinigung.

## Ausgaben

Die Funktion gibt bei Erfolg nichts zurück. Der gesamte Fortschritt wird geschrieben über `Write-RjRbLog -Verbose` (sichtbar, wenn das Runbook mit `-Verbose` oder `$VerbosePreference = 'Continue'`). Warnungen werden erzwungen über `$WarningPreference = 'Continue'` unabhängig von Überschreibungen auf Aufruferseite, sodass sie zuverlässig im Azure Automation-Job-Stream erscheinen.

## Verwandte exportierte Hilfsfunktionen

Die Bausteine hinter `Send-RjRbReportEmail` werden jetzt ebenfalls aus dem Modul exportiert, sodass Runbooks das HTML zusammenstellen oder in der Vorschau anzeigen können, ohne zu senden:

| Funktion                                                                                         | Zweck                                                                                                                                                                                                                                    |
| ------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [`Get-RjRbBrandingMailParams`](/de/dev-reference/report-functions/get-rjrbbrandingmailparams.md) | Wandelt die `RJReport.Branding.*` Tenant-Einstellungen in sofort einsetzbare Parameter um: lädt die Bilder herunter und validiert sie, reicht Farben und Footer-Link durch.                                                              |
| `ConvertFrom-RjRbMarkdownToHtml`                                                                 | Eigenständiger Markdown-→-HTML-Konverter (die gleiche leichte Engine, die intern verwendet wird, einschließlich der `{button}` Syntax). Akzeptiert `-AccentColor`/`-TextColor`.                                                          |
| `Get-RjRbReportEmailBody`                                                                        | Stellt den vollständigen gebrandeten HTML-Body (Header/Footer, Tenant-Info-Box, Anlagenliste) aus HTML oder Markdown zusammen — nützlich, um die E-Mail vor dem Senden zu rendern und zu prüfen. Akzeptiert `-AccentColor`/`-TextColor`. |
| `Resolve-RjRbImageSource`                                                                        | Löst einen Header/Footer-Bildpfad in seine Inline-CID-Quelle auf. Validiert anhand der Dateisignatur und löst bei allem aus, was kein PNG, JPEG oder GIF ist.                                                                            |

Außer `Get-RjRbBrandingMailParams`, sind diese hauptsächlich für fortgeschrittene Test-/Szenarios gedacht; der normale `Send-RjRbReportEmail` Weg ist, aufzurufen

## Siehe auch

* [Get-RjRbBrandingMailParams](/de/dev-reference/report-functions/get-rjrbbrandingmailparams.md) — Auflösen der Tenant-Branding-Einstellungen innerhalb eines Runbooks.
* [Runbook-Berichtseinstellungen](/de/automatisierung/runbooks/runbook-report-settings.md) — zentrale Konfiguration des Absenderpostfachs, der Service-Desk-Informationen, des Brandings und des Storage Account-Zustellkanals.
* Microsoft Graph: [E-Mail senden](https://learn.microsoft.com/en-us/graph/api/user-sendmail) — zugrunde liegende API.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.realmjoin.com/de/dev-reference/report-functions/send-rjrbreportemail.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
