> 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/fr/dev-reference/report-functions/send-rjrbreportemail.md).

# Send-RjRbReportEmail

Envoyer des e-mails de rapport HTML avec l'image de marque depuis les runbooks Azure Automation via Microsoft Graph en utilisant du contenu Markdown.

## Aperçu

`Send-RjRbReportEmail` est l'assistant standard pour la livraison d'e-mails de rapport depuis les runbooks de reporting RealmJoin. Il prend du contenu Markdown, le convertit en e-mail HTML réactif brandé RealmJoin, joint des fichiers facultatifs et des éléments graphiques de branding intégrés (en-tête/pied de page), puis envoie le résultat via Microsoft Graph `sendMail` point de terminaison.

> **Renommé dans cette version.** La fonction a été renommée de `Send-RjReportEmail` en `Send-RjRbReportEmail` pour assurer la cohérence de nommage avec le reste du module (`*-RjRb*`). L'ancien nom `Send-RjReportEmail` est exporté comme alias compatible avec les versions précédentes, donc les runbooks existants continuent de fonctionner sans modification — mais les nouveaux runbooks doivent appeler `Send-RjRbReportEmail`.

Caractéristiques principales :

* **Markdown en entrée, HTML en sortie** — les runbooks composent le corps du rapport en Markdown ; la fonction le rend en HTML thématique qui fonctionne dans Outlook Classic, New Outlook, Outlook Web, les clients mobiles et le mode sombre.
* **Un e-mail par destinataire** — lorsque plusieurs destinataires sont fournis, la fonction envoie un message individuel à chaque adresse plutôt qu'un seul e-mail multi-destinataires. Il s'agit d'une conception avec copie cachée par défaut.
* **En-tête et pied de page brandés intégrés** — les ressources PNG incluses sont envoyées comme pièces jointes CID et référencées par le HTML intégré. Les deux peuvent être remplacées ou entièrement désactivées.
* **Couleurs du modèle personnalisables** — la couleur d'accentuation et la couleur du texte du modèle peuvent être remplacées à chaque appel, afin que les e-mails de rapport puissent suivre la charte graphique d'un client.
* **Protection intégrée contre la taille des pièces jointes** — un ensemble de pièces jointes de secours plus réduit est envoyé automatiquement lorsque l'ensemble normal dépasse le budget de taille ou que sa tentative d'envoi échoue.
* **Connexion automatique** — si aucune session Graph n'est active, la fonction appelle de manière transparente `Connect-RjRbGraph` (ou `Connect-MgGraph -Identity` lorsque `-UseNativeGraphRequest` est défini).
* **Résilient** — les erreurs de lecture des pièces jointes, les remplacements d'image invalides, les couleurs invalides ou les échecs sendMail par destinataire sont signalés, mais n'interrompent pas tout le lot sauf si *tous* les destinataires échouent.

Les paramètres de messagerie centralisés (adresse d'expéditeur, informations du service desk) sont documentés dans [Paramètres du rapport du runbook](/fr/automatisation/runbooks/runbook-report-settings.md) — ce document se concentre sur l'appel de la fonction depuis un runbook.

## Prérequis

### Boîte aux lettres de l'expéditeur

Une boîte aux lettres Microsoft 365 sous licence (généralement une boîte aux lettres partagée dédiée telle que `realmjoin-report@contoso.com`) est requise comme adresse `De` . L'identité managée du compte d'automatisation doit être autorisée à envoyer au nom de cette boîte aux lettres via l'autorisation d'application Graph `Mail.Send` (limitée via RBAC for Applications si vous souhaitez restreindre l'identité à une seule boîte aux lettres).

> **L'expéditeur ne doit pas être un groupe Microsoft 365.** La fonction envoie via le point de terminaison Graph `/users/{EmailFrom}/sendMail` — un groupe Microsoft 365 n'est pas un objet utilisateur, donc l'appel échoue. Utilisez un utilisateur ou une boîte aux lettres partagée.
>
> Les adresses de groupes Microsoft 365 comme **destinataires** sont techniquement acceptées, mais **déconseillées**: le message peut n'atteindre que la boîte aux lettres du groupe (les membres ne reçoivent une copie personnelle que s'ils suivent le groupe), la gestion de remise du groupe peut rejeter l'expéditeur, et les échecs de remise n'apparaissent que comme un NDR dans la boîte aux lettres de l'expéditeur — le runbook lui-même indique quand même une réussite. Préférez des adresses de boîte aux lettres individuelles.

### Autorisations Graph

| Scénario                                  | Autorisation requise                                               |
| ----------------------------------------- | ------------------------------------------------------------------ |
| Par défaut (`Invoke-RjRbRestMethodGraph`) | `Mail.Send` (Application) sur la boîte aux lettres de l'expéditeur |
| Avec `-UseNativeGraphRequest`             | Identique — l'appel atteint toujours `/users/{id}/sendMail`        |

### Connexion au module

Par défaut, la fonction utilise `Invoke-RjRbRestMethodGraph` de ce module. Si aucune connexion n'est active, elle se connecte automatiquement via `Connect-RjRbGraph`. Lorsque `-UseNativeGraphRequest` est défini, la fonction vérifie à la place `Get-MgContext` et appelle `Connect-MgGraph -Identity -NoWelcome` à la demande.

## Démarrage rapide

L'appel minimal viable ne nécessite que l'expéditeur, le destinataire, un objet et le corps Markdown :

```powershell
Send-RjRbReportEmail `
    -EmailFrom "realmjoin-report@contoso.com" `
    -EmailTo   "alice@contoso.com" `
    -Subject   "Weekly Report" `
    -MarkdownContent @"
# Rapport hebdomadaire

Bonjour Alice,

voici les chiffres de cette semaine :

- Nouveaux appareils inscrits : **42**
- Conformité des licences : **98 %**
"@
```

Cela génère un e-mail RealmJoin entièrement brandé avec l'en-tête et le pied de page par défaut, la prise en charge des modes clair/sombre et le bloc tenant/version dans le pied de page.

## Paramètres

### Requis

| Paramètre         | Type     | Description                                                                                                                                                                                                                                                                                                           |
| ----------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `EmailFrom`       | `chaîne` | Nom principal d'utilisateur ou ID d'objet de la boîte aux lettres de l'expéditeur. Utilisé comme `/users/{id}/sendMail`. Doit être un utilisateur ou une boîte aux lettres partagée — un groupe Microsoft 365 n'est pas un objet utilisateur et l'envoi échoue.                                                       |
| `EmailTo`         | `chaîne` | Adresse du destinataire. **Chaîne unique** — plusieurs adresses sont transmises sous forme de liste séparée par des virgules, voir ci-dessous. Les adresses de groupes Microsoft 365 sont acceptées mais déconseillées — la remise aux membres n'est pas garantie et les échecs ne sont pas visibles pour le runbook. |
| `Objet`           | `chaîne` | Ligne d'objet. Injectée également dans le HTML `<title>` élément.                                                                                                                                                                                                                                                     |
| `MarkdownContent` | `chaîne` | Corps du rapport en Markdown. Voir [Prise en charge du Markdown](#markdown-support) pour la syntaxe prise en charge.                                                                                                                                                                                                  |

### Facultatif — contenu

| Paramètre           | Type       | Par défaut | Description                                                                                                                                                                                                                   |
| ------------------- | ---------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Pièces jointes`    | `chaîne[]` | `@()`      | Chemins de fichiers locaux à joindre. Les fichiers manquants sont consignés et ignorés, les fichiers illisibles génèrent un avertissement mais n'interrompent pas l'envoi. Le type MIME est déduit de l'extension du fichier. |
| `saveToSentItems`   | `bool`     | `$true`    | Si `$true` le message envoyé est conservé dans les *Éléments envoyés*. Définissez-le sur `$false` pour les rapports à grand volume afin d'éviter de saturer la boîte aux lettres.                                             |
| `TenantDisplayName` | `chaîne`   | —          | Affiché dans la zone d'informations sur le tenant intégrée à la fin de la zone de contenu.                                                                                                                                    |
| `ReportVersion`     | `chaîne`   | —          | Affiché dans la zone d'informations sur le tenant (utilisez des chaînes de version sémantique, des numéros de build ou un nom de runbook + une date).                                                                         |

### Facultatif — Branding

| Paramètre               | Type          | Par défaut                  | Description                                                                                                                                                                                                                                                                                                       |
| ----------------------- | ------------- | --------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Image d'en-tête`       | `chaîne`      | inclus `Assets/Header.png`  | Chemin de fichier local vers un PNG/JPG/GIF qui remplace l'image d'en-tête par défaut. **Le runbook doit d'abord résoudre toute URL/blob en fichier local** (par ex. via `Get-AzStorageBlobContent`). Les remplacements manquants/illisibles reviennent au modèle par défaut inclus et génèrent un avertissement. |
| `Image de pied de page` | `chaîne`      | inclus `Assets/Footer.png`  | Même traitement que `Image d'en-tête`. Le pied de page est rendu comme une seule image cliquable — tout texte de branding, logo ou URL doit être intégré au PNG.                                                                                                                                                  |
| `Lien du pied de page`  | `chaîne`      | `https://www.realmjoin.com` | URL utilisée comme `href` et `titre` du lien englobant l'image du pied de page.                                                                                                                                                                                                                                   |
| `Pas d'en-tête`         | `commutateur` | désactivé                   | Supprime entièrement l'image d'en-tête. Si combiné avec `Image d'en-tête`, un avertissement est émis et le remplacement est ignoré.                                                                                                                                                                               |
| `Pas de pied de page`   | `commutateur` | désactivé                   | Supprime entièrement l'image de pied de page et son lien. Si combiné avec `Image de pied de page` ou un custom `Lien du pied de page`, un avertissement est émis et ces valeurs sont ignorées.                                                                                                                    |
| `AccentColor`           | `chaîne`      | `#f8842c`                   | *Nouveau dans la version 0.8.9.* Couleur hexadécimale à 6 chiffres pour les lignes d'en-tête des tableaux, les boutons d'action et les bordures d'accentuation des boîtes d'information. Une valeur vide ou mal formée génère un avertissement et revient à la valeur par défaut.                                 |
| `TextColor`             | `chaîne`      | `#011e33`                   | *Nouveau dans la version 0.8.9.* Couleur hexadécimale à 6 chiffres pour le texte du corps, les titres, les éléments de liste et le code. Même comportement de repli que `AccentColor`.                                                                                                                            |

**Dimensions d'image recommandées :** PNG de 750 × 200 px. Cela correspond à la largeur du conteneur de l'e-mail et aux valeurs par défaut incluses. Des rapports d'aspect très différents peuvent sembler déformés sur des fenêtres étroites. Chaque image doit rester bien en dessous de 3 Mo — Graph plafonne la requête totale à 4 Mo et un avertissement est émis si l'une ou l'autre image dépasse 3 Mo. `sendMail` la requête totale à 4 Mo et un avertissement est émis si l'une ou l'autre image dépasse 3 Mo.

**Couleurs :** sans `AccentColor`/`TextColor` le HTML généré est identique octet pour octet aux versions précédentes du module — les valeurs par défaut sont l'orange et le bleu marine RealmJoin. Les couleurs d'état (vert/rouge/ambre) et les gris neutres ne sont pas paramétrées volontairement car elles véhiculent du sens. Vérifiez les couleurs personnalisées en mode clair et sombre : la carte de contenu reste blanche en mode sombre, donc une couleur de texte très claire devient illisible.

### Facultatif — protection contre la taille des pièces jointes

*Nouveau dans la version 0.8.9.* Graph rejette l'intégralité de la `sendMail` requête une fois que le message dépasse environ 4 Mo. Au lieu de faire échouer le rapport, la fonction peut basculer vers un ensemble de pièces jointes plus petit. Cette logique était auparavant dupliquée dans l'assistant inline du runbook `Send-RjRbGuardedReportEmail` et fait désormais partie de la fonction elle-même.

| Paramètre                     | Type       | Par défaut                  | Description                                                                                                                                                                                                                                                                       |
| ----------------------------- | ---------- | --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Pièces jointes de secours`   | `chaîne[]` | —                           | Ensemble de pièces jointes plus petit utilisé lorsque l'ensemble normal dépasse `MaxAttachmentBytes`, ou lorsque l'envoi avec l'ensemble normal échoue pour tous les destinataires. Sans ce paramètre, il n'y a pas de repli et un envoi échoué lève immédiatement une exception. |
| `Contenu Markdown de secours` | `chaîne`   | valeur de `MarkdownContent` | Corps utilisé lorsque l'ensemble de secours est envoyé — utilisez-le pour expliquer quels fichiers ont été omis et comment les obtenir.                                                                                                                                           |
| `MaxAttachmentBytes`          | `long`     | `2,5 Mo`                    | Budget de taille brute pour l'ensemble de pièces jointes normal. Reste bien en dessous de la limite Graph d'environ 4 Mo après l'encodage base64 (+33 %), le corps HTML et les images de branding intégrées. Évalué uniquement lorsque `Pièces jointes de secours` est fourni.    |

La protection se déroule en deux étapes :

1. **Avant l'envoi** — si l'ensemble normal dépasse le budget, l'ensemble de secours est envoyé directement et un message indique les deux tailles.
2. **Après un envoi échoué** — si l'envoi avec l'ensemble normal échoue pour *tous* les destinataires, une nouvelle tentative avec l'ensemble de secours est effectuée avant que la fonction ne lève une exception.

### Facultatif — transport

| Paramètre               | Type          | Par défaut | Description                                                                                                                                                                                                                                                                   |
| ----------------------- | ------------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `UseNativeGraphRequest` | `commutateur` | désactivé  | Envoie via `Invoke-MgGraphRequest` (nécessite `Microsoft.Graph` module Microsoft.Graph et une `Connect-MgGraph` session) au lieu de `Invoke-RjRbRestMethodGraph`. Utilisez cette option lorsque le runbook est construit autour du SDK natif plutôt que du wrapper RealmJoin. |

## Exemples d'utilisation

### Destinataires multiples

`EmailTo` accepte une seule chaîne contenant une ou plusieurs adresses séparées par des virgules. Chaque adresse est nettoyée, les entrées vides sont supprimées, et **un e-mail individuel est envoyé par destinataire** — les destinataires ne se voient pas entre eux.

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

### Avec pièces jointes et métadonnées du tenant

```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           "Inventaire des appareils — $(Get-Date -Format 'yyyy-MM-dd')" `
    -MarkdownContent   $reportMd `
    -Attachments       @($csvPath, "$env:TEMP\\summary.xlsx") `
    -TenantDisplayName "Contoso Ltd" `
    -ReportVersion     "DeviceInventory v1.4.2"
```

Les fichiers joints sont également ajoutés comme pièces jointes réelles au message et sont listés dans une boîte « Fichiers joints » en bas du corps de l'e-mail.

### Branding personnalisé de l'en-tête et du pied de page

Apportez votre propre branding en téléchargeant d'abord les ressources vers un chemin local, puis transmettez les chemins obtenus. La fonction ne récupère pas elle-même les URL.

```powershell
Résoudre les ressources de branding depuis Azure Blob Storage vers le dossier temporaire du runbook
$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          "Rapport brandé" `
    -MarkdownContent  $reportMd `
    -HeaderImage      $headerPath `
    -FooterImage      $footerPath `
    -FooterLink       "https://intranet.contoso.com/it-reports"
```

Si `$headerPath` est manquant ou illisible, l'appel réussit quand même — la valeur par défaut RealmJoin incluse est utilisée et un avertissement est consigné.

### Couleurs de modèle personnalisées

Adaptez l'e-mail à la charte graphique du client. Les deux paramètres sont indépendants — ne remplacer que la couleur d'accentuation conserve la couleur de texte par défaut :

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

Une valeur invalide (par exemple `bleu` ou `#05c`) n'échoue pas l'envoi : un avertissement indique le paramètre et la couleur par défaut est utilisée.

### Rapports volumineux avec un ensemble de pièces jointes de secours

Générez un CSV et un classeur Excel, mais revenez au classeur seul lorsque le duo dépasse le budget de taille :

```powershell
$sizeHint = "L'export CSV a été omis parce que les pièces jointes dépassaient la limite de taille de l'e-mail. Le classeur Excel contient l'intégralité des données."

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

Les runbooks migrés depuis l'assistant inline `Send-RjRbGuardedReportEmail` peuvent supprimer cette fonction et renommer l'appel en `Send-RjRbReportEmail` — les noms de paramètres (`Pièces jointes`, `Pièces jointes de secours`, `Contenu Markdown de secours`, `MaxAttachmentBytes`) sont inchangés.

### Contenu brut (sans en-tête/pied de page)

Pour des notifications de type alerte qui ne doivent pas ressembler à un e-mail marketing :

```powershell
Send-RjRbReportEmail `
    -EmailFrom       "realmjoin-report@contoso.com" `
    -EmailTo         "oncall@contoso.com" `
    -Subject         "[ALERT] Seuil de licence dépassé" `
    -MarkdownContent "## Seuil de licence dépassé`n`nVoir le tableau de bord pour plus de détails." `
    -NoHeader `
    -NoFooter
```

### Utilisation du SDK natif Microsoft.Graph

Si le runbook est déjà authentifié via `Connect-MgGraph` (identité managée) et que vous préférez ne pas mélanger le wrapper RealmJoin :

```powershell
Connect-MgGraph -Identity -NoWelcome

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

### Lecture du corps du rapport depuis un fichier

Pour les rapports plus volumineux, générez le Markdown dans un `.md` fichier puis lisez-le :

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

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

### Boutons d'action (appel à l'action)

Rendre un ou plusieurs boutons brandés en ajoutant `{button}` à un lien Markdown. Les boutons placés sur la même ligne sont regroupés en une seule ligne :

```powershell
$reportMd = @"
# Demande d'accès

Une nouvelle demande d'accès à un appareil attend votre décision.

[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 requise : demande d'accès à un appareil" `
    -MarkdownContent $reportMd
```

Chaque bouton est un simple lien hypertexte stylisé comme un CTA — sûr dans tous les clients, avec des coins arrondis dans les clients modernes et des coins carrés dans Outlook Classic.

## Prise en charge du Markdown

La fonction est fournie avec un convertisseur Markdown → HTML léger intégré. **Aucun module Markdown externe n'est requis.** Syntaxe prise en charge :

| Markdown                                          | Notes                                                                                                                                                                                                                                                                                                                                                                    |
| ------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `# … ######` titres                               | Les six niveaux. Espace après `#` est facultatif. `h1` reçoit un soulignement ; l'espacement est optimisé pour Outlook.                                                                                                                                                                                                                                                  |
| `**gras**`, `*italique*`, `~~barré~~`             | En ligne uniquement (ne doit pas s'étendre sur plusieurs lignes).                                                                                                                                                                                                                                                                                                        |
| `` `code en ligne` ``                             | Rendu sous la forme de `<code>` avec un fond gris clair.                                                                                                                                                                                                                                                                                                                 |
| blocs de code délimités par des clôtures lang ... | La balise de langue est conservée sous la forme `class="language-…"`. Tolère également les délimiteurs à un seul accent grave mal formés.                                                                                                                                                                                                                                |
| `[text](url)` liens                               | Ouvrir dans un nouvel onglet avec `noopener noreferrer`.                                                                                                                                                                                                                                                                                                                 |
| `[label](url){button}` boutons de lien            | Rendu sous la forme d'un bouton d'appel à l'action orange de marque au lieu d'un simple lien. Plusieurs `{button}` liens sur la **même ligne** s'affichent côte à côte sur une même ligne (largeur répartie également). Les coins arrondis s'affichent dans les clients modernes (Nouvel Outlook, OWA, mobile) ; Outlook Classic (moteur Word) affiche des coins carrés. |
| `![alt](url)` images                              | Insérées sous la forme de `<img>` (aucune magie de pièce jointe intégrée — l'URL doit être accessible par le client de messagerie).                                                                                                                                                                                                                                      |
| `- élément` / `1. élément` listes                 | Les listes imbriquées sont prises en charge via une indentation de 2 espaces par niveau. Le mélange d'éléments ordonnés et non ordonnés ferme la liste précédente.                                                                                                                                                                                                       |
| Éléments de liste multilignes                     | Une ligne indentée non vide directement sous un `<li>` est fusionnée dans le même élément avec un `<br>` saut de ligne souple — pas besoin de garder chaque élément sur une seule ligne.                                                                                                                                                                                 |
| `- [ ]` / `- [x]` listes de tâches                | Rendu sous la forme de `☐` / `☑` glyphes Unicode (verts lorsqu'ils sont cochés). `<input type="checkbox">` est volontairement évité, car Outlook Classic supprime les contrôles de formulaire. Majuscule `[X]` compte également comme coché.                                                                                                                             |
| `> citation`                                      | Rendu avec une bordure gauche colorée et un fond ombré.                                                                                                                                                                                                                                                                                                                  |
| `> [!NOTE\|TIP\|IMPORTANT\|WARNING\|CAUTION]`     | Avertissements au style GitHub. La première ligne de la citation est le marqueur (seul), les lignes restantes `>`précédées d'un tiret constituent le corps. Chaque type reçoit sa propre couleur d'accent, son glyphe et sa barre de titre.                                                                                                                              |
| `---`, `***`, `___`                               | Règle horizontale.                                                                                                                                                                                                                                                                                                                                                       |
| `\|col\|col\|` tableaux                           | Tableaux standards à barres verticales avec `:---`, `:---:`, `---:` spécificateurs d'alignement. Une ligne d'en-tête + un séparateur sont requis.                                                                                                                                                                                                                        |
| `\\` échappement                                  | `\*`, `\|` etc. sont respectés afin que les caractères Markdown littéraux puissent être émis.                                                                                                                                                                                                                                                                            |

Les éléments non pris en charge comprennent les notes de bas de page, les listes de définitions et le passage direct de HTML — limitez le Markdown au tableau ci-dessus.

## Comportement et gestion des erreurs

### Analyse des destinataires

`EmailTo` est séparé par des virgules, chaque entrée est trimée et les entrées vides sont supprimées. Si la liste résultante est vide, la fonction lève `Aucun destinataire e-mail valide trouvé dans le paramètre EmailTo.` avant qu'un appel Graph ne soit effectué.

### Échecs par destinataire

Chaque destinataire est envoyé indépendamment. La fonction suit les réussites et les échecs :

* Si **au moins un** envoi réussit mais que les autres échouent, un avertissement est émis listant les adresses en échec ; la fonction se termine normalement.
* Si **tous** envois échouent, la fonction lève `Échec de l'envoi de l'e-mail à tous les destinataires : …` afin que le runbook échoue de manière explicite.

### Échecs des pièces jointes

* Fichiers manquants (le chemin n'existe pas) — consignés de manière détaillée, ignorés silencieusement.
* Fichiers existants mais illisibles (verrouillés, permission refusée) — avertissement émis, ignorés, le reste de l'appel se poursuit.
* La zone « Fichiers joints » en bas de l'e-mail liste uniquement les pièces jointes qui ont été lues avec succès.

### Échecs de remplacement d'image

Les deux `Image d'en-tête` et `Image de pied de page` reviennent aux valeurs par défaut intégrées en cas d'erreur (fichier manquant, erreur d'E/S ou fichier qui n'est pas une image valide). Un avertissement décrit l'échec et indique quel défaut a été utilisé.

Depuis la version 0.8.9, le format d'image est déterminé à partir de la **signature de fichier** (octets magiques) plutôt qu'à partir de l'extension de fichier. Un fichier nommé `.png` mais contient en réalité une page d'erreur HTML — issue fréquente lorsqu'un téléchargement renvoie silencieusement un document d'erreur — est désormais rejeté avec un avertissement au lieu de produire une pièce jointe intégrée cassée. À l'inverse, un PNG valide enregistré avec une extension trompeuse est accepté et typé correctement.

### Couleurs invalides

`AccentColor` et `TextColor` sont validées par rapport à `^#[0-9A-Fa-f]{6}$`Une valeur qui ne correspond pas émet un avertissement indiquant le paramètre, et l'envoi se poursuit avec la couleur par défaut. Les couleurs ne sont jamais une raison pour qu'un rapport échoue.

### Limite de taille totale

Graph limite `sendMail` les requêtes à environ 4 Mo au total (corps HTML + toutes les pièces jointes, encodés en base64). La fonction émet un avertissement lorsque l'une ou l'autre image de branding dépasse 3 Mo.

Lorsque `Pièces jointes de secours` est fourni, la protection de taille des pièces jointes décrite dans la section des paramètres ci-dessus gère automatiquement les charges utiles trop volumineuses. Sans ensemble de repli, une requête trop volumineuse échoue lors de l'appel Graph ; envisagez :

* Fournir un `Pièces jointes de secours` ensemble (par exemple le classeur Excel sans les fichiers CSV bruts).
* Téléverser plutôt les grandes données vers le canal Storage Account — voir [Paramètres du rapport du runbook](/fr/automatisation/runbooks/runbook-report-settings.md#storage-account-delivery).
* Lier des pièces jointes hébergées à l'extérieur plutôt que de les intégrer.
* Compresser des données tabulaires (`Compress-Archive`) avant de les joindre.

## Intégration avec les paramètres de rapport de runbook

Les runbooks de reporting n'codent pas en dur l'adresse de l'expéditeur ni le branding : ils déclarent des paramètres masqués que le portail RealmJoin préremplit à partir du JSON de personnalisation central. Les paramètres disponibles sont documentés dans [Paramètres du rapport du runbook](/fr/automatisation/runbooks/runbook-report-settings.md).

La liaison s'effectue dans le `param()` bloc via `Use-RJInterface -Type Setting`, et les paramètres sont marqués `"Hide": true` dans le `.INPUTS RunbookCustomization` bloc afin qu'ils n'encombrent pas le formulaire du portail :

```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 "Aucun EmailSender configuré. Voir https://docs.realmjoin.com/automation/runbooks/runbook-report-settings pour les instructions de configuration."
}

# Télécharger et valider les images de branding une fois par exécution ; ne renvoie que les clés
# qui ont été résolues avec succès, afin que les paramètres non définis retombent sur les valeurs par défaut.
$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
```

Voir [Get-RjRbBrandingMailParams](/fr/dev-reference/report-functions/get-rjrbbrandingmailparams.md) pour les règles de téléchargement, de validation et de nettoyage.

## Sorties

La fonction ne renvoie rien en cas de succès. Toute la progression est écrite via `Write-RjRbLog -Verbose` (visible lorsque le runbook est exécuté avec `-Verbose` ou `$VerbosePreference = 'Continue'`). Les avertissements sont imposés via `$WarningPreference = 'Continue'` quelle que soit la surcharge côté appelant, afin qu'ils apparaissent de manière fiable dans le flux de travaux Azure Automation.

## Aides exportées associées

Les éléments de base derrière `Send-RjRbReportEmail` sont désormais également exportés depuis le module, afin que les runbooks puissent composer ou prévisualiser le HTML sans l'envoyer :

| Fonction                                                                                         | Objectif                                                                                                                                                                                                                                                              |
| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [`Get-RjRbBrandingMailParams`](/fr/dev-reference/report-functions/get-rjrbbrandingmailparams.md) | Transforme les `RJReport.Branding.*` paramètres du locataire en paramètres prêts à être splattés : télécharge et valide les images, transmet les couleurs et le lien de pied de page.                                                                                 |
| `ConvertFrom-RjRbMarkdownToHtml`                                                                 | Convertisseur autonome Markdown → HTML (le même moteur léger utilisé en interne, y compris la `{button}` syntaxe). Accepts `-AccentColor`/`-TextColor`.                                                                                                               |
| `Get-RjRbReportEmailBody`                                                                        | Assemble le corps HTML complet avec branding (en-tête/pied de page, encadré d'informations sur le locataire, liste des pièces jointes) à partir de HTML ou de Markdown — utile pour générer et inspecter l'e-mail avant l'envoi. Accepte `-AccentColor`/`-TextColor`. |
| `Resolve-RjRbImageSource`                                                                        | Résout le chemin d'une image d'en-tête/pied de page vers sa source CID intégrée. Valide par signature de fichier et lève une exception pour tout ce qui n'est pas un PNG, JPEG ou GIF.                                                                                |

À l'exception de `Get-RjRbBrandingMailParams`ces éléments `Send-RjRbReportEmail` directement.

## Voir aussi

* [Get-RjRbBrandingMailParams](/fr/dev-reference/report-functions/get-rjrbbrandingmailparams.md) — résolution des paramètres de branding du locataire à l'intérieur d'un runbook.
* [Paramètres du rapport du runbook](/fr/automatisation/runbooks/runbook-report-settings.md) — configuration centrale de la boîte aux lettres de l'expéditeur, des informations du service desk, du branding et du canal de livraison Storage Account.
* Microsoft Graph: [Envoyer un e-mail](https://learn.microsoft.com/en-us/graph/api/user-sendmail) — API sous-jacente.


---

# 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/fr/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.
