> 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

## Vue d’ensemble

`Send-RjRbReportEmail` est l’assistant standard pour l’envoi d’e-mails de rapport depuis les runbooks de reporting RealmJoin. Il prend du contenu Markdown, le convertit en e-mail HTML réactif à la marque RealmJoin, joint des fichiers facultatifs et des éléments graphiques de marque intégrés (en-tête/pied de page), et 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, afin que les runbooks existants continuent de fonctionner sans changement — mais les nouveaux runbooks doivent appeler `Send-RjRbReportEmail`.

Caractéristiques principales :

* **Markdown en entrée, HTML en sortie** — les runbooks rédigent le corps du rapport en Markdown ; la fonction le restitue en HTML thématisé compatible avec Outlook classique, le nouvel 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. C'est une conception axée sur la confidentialité/BCC par défaut.
* **En-tête et pied de page de marque intégrés** — les ressources PNG fournies sont envoyées comme pièces jointes CID et référencées par le HTML intégré. Les deux peuvent être remplacés ou entièrement désactivés.
* **Auto-connexion** — si aucune session Graph n'est active, la fonction appelle automatiquement `Connect-RjRbGraph` (ou `Connect-MgGraph -Identity` lorsque `-UseNativeGraphRequest` est défini).
* **Résilient** — les lectures de pièces jointes échouées, les remplacements d'image manquants ou les échecs d'envoi sendMail par destinataire sont signalés mais n'interrompent pas tout le lot, sauf si *tous* les destinataires échouent.

Les paramètres d'e-mail centralisés (adresse d'expéditeur, informations du service desk) sont documentés dans [Paramètres du rapport de 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 expéditrice

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 `De` adresse. L'identité managée du compte Automation doit être autorisée à envoyer au nom de cette boîte aux lettres via l'autorisation d'application Graph `Mail.Send` (délimitée via RBAC for Applications si vous souhaitez restreindre l'identité à une seule boîte aux lettres).

### Autorisations Graph

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

### Connectivité du 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   "Rapport hebdomadaire" `
    -MarkdownContent @"
# Rapport hebdomadaire

Bonjour Alice,

voici les chiffres de cette semaine :

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

Cela produit un e-mail RealmJoin entièrement marqué, 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 identifiant d'objet de la boîte aux lettres expéditrice. Utilisé comme `/users/{id}/sendMail`.                  |
| `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. |
| `Objet`           | `chaîne` | Ligne d'objet. Également injectée dans le `<title>` élément.                                                                                   |
| `MarkdownContent` | `chaîne` | Corps du rapport en Markdown. Voir [Prise en charge de Markdown](#markdown-support) pour la syntaxe prise en charge.                           |

### Facultatif — Contenu

| Paramètre           | Type       | Valeur 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 *Éléments envoyés*de la boîte aux lettres expéditrice. Définissez-le sur `$false` pour les rapports à gros volume afin d'éviter de saturer la boîte aux lettres.               |
| `TenantDisplayName` | `chaîne`   | —                 | Affiché dans la boîte d'infos du tenant intégrée à la fin de la zone de contenu.                                                                                                                                              |
| `ReportVersion`     | `chaîne`   | —                 | Affiché dans la boîte d'infos du 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          | Valeur par défaut           | Description                                                                                                                                                                                                                                                                                               |
| ------------- | ------------- | --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `HeaderImage` | `chaîne`      | intégré `Assets/Header.png` | Chemin de fichier local vers un PNG/JPG/GIF qui remplace le visuel 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 défaut intégré et génèrent un avertissement. |
| `FooterImage` | `chaîne`      | intégré `Assets/Footer.png` | Même traitement que `HeaderImage`. Le pied de page est rendu comme une seule image cliquable — tout texte de marque, logo ou URL doit être intégré dans le PNG.                                                                                                                                           |
| `FooterLink`  | `chaîne`      | `https://www.realmjoin.com` | URL utilisée comme `href` et `title` du lien englobant l'image de pied de page.                                                                                                                                                                                                                           |
| `NoHeader`    | `commutateur` | désactivé                   | Supprime complètement le visuel d'en-tête. S'il est combiné avec `HeaderImage`, un avertissement est émis et le remplacement est ignoré.                                                                                                                                                                  |
| `NoFooter`    | `commutateur` | désactivé                   | Supprime complètement le visuel de pied de page et son lien. S'il est combiné avec `FooterImage` ou un `FooterLink`personnalisé, un avertissement est émis et ces valeurs sont ignorées.                                                                                                                  |

**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 intégrées. Des rapports largeur/hauteur nettement différents peuvent paraître déformés sur les écrans étroits. Chaque visuel doit rester bien en dessous de 3 Mo — Graph limite le total `sendMail` de la requête à 4 Mo et un avertissement est émis si l'une ou l'autre image dépasse 3 Mo.

### Facultatif — Transport

| Paramètre               | Type          | Valeur par défaut | Description                                                                                                                                                                                                                                                      |
| ----------------------- | ------------- | ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `UseNativeGraphRequest` | `commutateur` | désactivé         | Envoie via `Invoke-MgGraphRequest` (nécessite `Microsoft.Graph` le module 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 répertoriés dans une boîte « Attached Files » au bas du corps de l'e-mail, en plus d'être ajoutés comme pièces jointes réelles au message.

### Branding personnalisé de l'en-tête/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 de marque" `
    -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 — le défaut intégré de RealmJoin est utilisé et un avertissement est consigné.

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

Pour les 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] Le seuil de licences a été dépassé" `
    -MarkdownContent "## Le seuil de licences a été 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 fichier `.md` 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 de marque 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 lien hypertexte normal 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 de 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                                      | Remarques                                                                                                                                                                                                                                                                                                                                                        |
| --------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `# … ######` titres                           | Les six niveaux. L'espace après `#` est facultatif. `h1` obtient un soulignement ; l'espacement est adapté à Outlook.                                                                                                                                                                                                                                            |
| `**gras**`, `*italique*`, `~~barré~~`         | Uniquement en ligne (ne doit pas s'étendre sur plusieurs lignes).                                                                                                                                                                                                                                                                                                |
| `` `code inline` ``                           | Rendu comme `<code>` avec un fond gris clair.                                                                                                                                                                                                                                                                                                                    |
| blocs de code délimités lang ...              | L'étiquette de langue est conservée comme `class="language-…"`. Tolère également les délimiteurs mal formés à un seul accent grave.                                                                                                                                                                                                                              |
| `[texte](url)` liens                          | S'ouvre dans un nouvel onglet avec `noopener noreferrer`.                                                                                                                                                                                                                                                                                                        |
| `[label](url){button}` boutons de lien        | Rendu comme un bouton orange de marque incitant à l'action 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 apparaissent dans les clients modernes (Nouvel Outlook, OWA, mobile) ; Outlook Classic (moteur Word) affiche des coins carrés. |
| `![alt](url)` images                          | Insérées comme `<img>` (pas de 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 de listes ordonnées et non ordonnées ferme la liste précédente.                                                                                                                                                                                              |
| Éléments de liste sur plusieurs lignes        | Une ligne indentée et non vide directement sous un `<li>` est intégrée au même élément avec un `<br>` saut de ligne souple — inutile de garder chaque élément sur une seule ligne.                                                                                                                                                                               |
| `- [ ]` / `- [x]` listes de tâches            | Rendu comme `☐` / `☑` Glyphes Unicode (verts lorsqu'ils sont cochés). `<input type="checkbox">` est volontairement évité car Outlook Classic supprime les contrôles de formulaire. La majuscule `[X]` compte également comme coché.                                                                                                                              |
| `> citation`                                  | Rendu avec une bordure gauche colorée et un fond ombré.                                                                                                                                                                                                                                                                                                          |
| `> [!NOTE\|TIP\|IMPORTANT\|WARNING\|CAUTION]` | Avertissements de style GitHub. La première ligne de la citation est le marqueur (seul), les lignes restantes `>`préfixées par - constituent le corps. Chaque type a sa propre couleur d'accent, son glyphe et sa barre de titre.                                                                                                                                |
| `---`, `***`, `___`                           | Règle horizontale.                                                                                                                                                                                                                                                                                                                                               |
| `\|col\|col\|` tableaux                       | Tableaux à barres verticales standard avec `:---`, `:---:`, `---:` des spécificateurs d'alignement. Ligne d'en-tête + séparateur requis.                                                                                                                                                                                                                         |
| `\\` échappement                              | `\*`, `\|` etc. sont respectés afin que des caractères Markdown littéraux puissent être émis.                                                                                                                                                                                                                                                                    |

Les éléments non pris en charge incluent les notes de bas de page, les listes de définitions et le passage HTML brut — 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 nettoyé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 traité indépendamment. La fonction suit les réussites et les échecs :

* Si **au moins un** envoi réussit mais d'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 verbeuse, ignorés silencieusement.
* Fichiers existants mais illisibles (verrouillés, autorisation refusée) — avertissement émis, ignorés, le reste de l'appel se poursuit.
* La boîte « Attached Files » au bas de l'e-mail répertorie uniquement les pièces jointes qui ont été lues avec succès.

### Échecs de remplacement d'image

Les deux `HeaderImage` et `FooterImage` revenir aux valeurs par défaut incluses en cas d’erreur (fichier manquant, extension non prise en charge, erreur d’E/S). Un avertissement décrit l’échec et indique quelle valeur par défaut a été utilisée.

### Limite de taille totale

Plafonds Graph `sendMail` requêtes à environ 4 Mo au total (corps HTML + toutes les pièces jointes, encodées en base64). La fonction émet un avertissement lorsque l’une ou l’autre image de branding dépasse 3 Mo. Si la charge utile totale dépasse toujours 4 Mo, l’appel Microsoft Graph lui-même échouera ; envisagez :

* Télécharger plutôt les grandes données via le canal Storage Account — voir [Paramètres du rapport de runbook](/fr/automatisation/runbooks/runbook-report-settings.md#storage-account-delivery).
* Créer des liens vers des pièces jointes hébergées à l’extérieur plutôt que de les intégrer.
* Compresser les données tabulaires (`Compress-Archive`) avant de les joindre.

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

Les runbooks de rapport résolvent généralement l’adresse de l’expéditeur à partir du JSON central de personnalisation RealmJoin plutôt que de la coder en dur. Les paramètres pertinents sont documentés dans [Paramètres du rapport de runbook](/fr/automatisation/runbooks/runbook-report-settings.md). Un modèle de résolution typique dans un runbook ressemble à ceci :

```powershell
# Lire les paramètres centralisés (résolus par le framework du runbook)
$emailFrom = (Get-RjRbDefaultValue -Name 'EmailSender' -Section 'RJReport')

if (-not $emailFrom) {
    throw "Aucun EmailSender configuré. Consultez https://docs.realmjoin.com/ pour les instructions de configuration."
}

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

## 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 forcés via `$WarningPreference = 'Continue'` quelle que soit la présence de remplacements 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 générer ou prévisualiser le HTML sans l’envoyer :

| Fonction                         | Objectif                                                                                                                                                                                                               |
| -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ConvertFrom-RjRbMarkdownToHtml` | Convertisseur Markdown → HTML autonome (le même moteur léger utilisé en interne, y compris la `{button}` syntaxe).                                                                                                     |
| `Get-RjRbReportEmailBody`        | Assemble le corps HTML complet avec branding (en-tête/pied de page, encadré d’informations Tenant, liste des pièces jointes) à partir de HTML ou de Markdown — utile pour générer et inspecter l’e-mail avant l’envoi. |
| `Resolve-RjRbImageSource`        | Résout un chemin d’image d’en-tête/pied de page vers sa source CID intégrée, en revenant à la valeur par défaut fournie en cas d’erreur.                                                                               |

Elles sont principalement destinées aux scénarios avancés/de test ; le chemin normal consiste à appeler `Send-RjRbReportEmail` directement.

## Voir aussi

* [Paramètres du rapport de 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 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.
