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

# Send-RjRbReportEmail

## Resumen

`Send-RjRbReportEmail` es el asistente estándar para entregar correos electrónicos de informes desde los runbooks de informes de RealmJoin. Toma contenido Markdown, lo convierte en un correo HTML adaptable con la marca de RealmJoin, adjunta archivos opcionales y gráficos de marca en línea (encabezado/pie de página) y envía el resultado a través de Microsoft Graph `sendMail` endpoint.

> **Renombrado en esta versión.** La función fue renombrada de `Send-RjReportEmail` a `Send-RjRbReportEmail` para mantener la coherencia de nomenclatura con el resto del módulo (`*-RjRb*`). El nombre anterior `Send-RjReportEmail` se exporta como un alias compatible con versiones anteriores, por lo que los runbooks existentes siguen funcionando sin cambios — pero los nuevos runbooks deben llamar a `Send-RjRbReportEmail`.

Características clave:

* **Markdown de entrada, HTML de salida** — los runbooks redactan el cuerpo del informe en Markdown; la función lo renderiza a HTML tematizado que funciona en Outlook Classic, New Outlook, Outlook Web, clientes móviles y modo oscuro.
* **Un correo por destinatario** — cuando se proporcionan varios destinatarios, la función envía un mensaje individual a cada dirección en lugar de un único correo con varios destinatarios. Este es un diseño de privacidad/BCC por defecto.
* **Encabezado y pie de página con marca en línea** — los recursos PNG incluidos se envían como adjuntos CID y se referencian desde el HTML incrustado. Ambos pueden sobrescribirse o suprimirse por completo.
* **Colores de plantilla personalizables** — el color de acento y el color del texto de la plantilla pueden sobrescribirse en cada llamada, para que los correos de informes sigan el diseño corporativo de un cliente.
* **Control integrado del tamaño de los adjuntos** — un conjunto alternativo opcional de adjuntos más pequeño se envía automáticamente cuando el conjunto normal supera el presupuesto de tamaño o cuando falla su intento de envío.
* **Autoconexión** — si no hay ninguna sesión de Graph activa, la función llama de forma transparente a `Connect-RjRbGraph` (o `Connect-MgGraph -Identity` cuando `-UseNativeGraphRequest` está establecido).
* **Resistente** — las lecturas fallidas de adjuntos, las sobreescrituras de imágenes no válidas, los colores no válidos o los fallos de sendMail por destinatario se notifican, pero no abortan todo el lote salvo que *todos* los destinatarios fallen.

La configuración centralizada del correo electrónico (dirección del remitente, información del service desk) está documentada en [Runbook Report Settings](/es/automatizacion/runbooks/runbook-report-settings.md) — este documento se centra en llamar a la función desde un runbook.

## Requisitos previos

### Buzón del remitente

Se requiere un buzón con licencia de Microsoft 365 (normalmente un buzón compartido dedicado como `realmjoin-report@contoso.com`) como la dirección `From` . La identidad administrada de la cuenta de Automation debe tener permiso para enviar en nombre de ese buzón a través de Graph `Mail.Send` permiso de aplicación (con ámbito mediante RBAC para Applications si quieres restringir la identidad a un único buzón).

### Permisos de Graph

| Escenario                                     | Permiso requerido                                          |
| --------------------------------------------- | ---------------------------------------------------------- |
| Predeterminado (`Invoke-RjRbRestMethodGraph`) | `Mail.Send` (Application) en el buzón del remitente        |
| Con `-UseNativeGraphRequest`                  | Igual — la llamada sigue llegando a `/users/{id}/sendMail` |

### Conectividad del módulo

De forma predeterminada, la función usa `Invoke-RjRbRestMethodGraph` de este módulo. Si no hay ninguna conexión activa, se conecta automáticamente mediante `Connect-RjRbGraph`. Cuando `-UseNativeGraphRequest` está establecido, la función en su lugar comprueba `Get-MgContext` y llama a `Connect-MgGraph -Identity -NoWelcome` cuando es necesario.

## Inicio rápido

La llamada mínima viable solo requiere el remitente, el destinatario, un asunto y el cuerpo Markdown:

```powershell
Send-RjRbReportEmail `
    -EmailFrom "realmjoin-report@contoso.com" `
    -EmailTo   "alice@contoso.com" `
    -Subject   "Informe semanal" `
    -MarkdownContent @"
# Informe semanal

Hola Alice,

aquí están los números de esta semana:

- Nuevos dispositivos inscritos: **42**
- Cumplimiento de licencias: **98%**
"@
```

Esto produce un correo de RealmJoin con marca completa, con el encabezado y pie de página predeterminados, compatibilidad con modo claro/oscuro y el bloque Tenant/versión en el pie de página.

## Parámetros

### Obligatorio

| Parámetro         | Tipo     | Descripción                                                                                                                   |
| ----------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------- |
| `EmailFrom`       | `cadena` | Nombre principal de usuario o identificador de objeto del buzón del remitente. Se usa como `/users/{id}/sendMail`.            |
| `EmailTo`         | `cadena` | Dirección del destinatario. **Una sola cadena** — varias direcciones se pasan como una lista separada por comas; véase abajo. |
| `Asunto`          | `cadena` | Línea de asunto. También se inserta en el HTML `<title>` elemento.                                                            |
| `MarkdownContent` | `cadena` | Cuerpo del informe en Markdown. Véase [Compatibilidad con Markdown](#markdown-support) para la sintaxis admitida.             |

### Opcional — Contenido

| Parámetro           | Tipo       | Predeterminado | Descripción                                                                                                                                                                                                            |
| ------------------- | ---------- | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Adjuntos`          | `cadena[]` | `@()`          | Rutas locales de archivo para adjuntar. Los archivos que faltan se registran y se omiten; los archivos ilegibles emiten una advertencia, pero no abortan el envío. El tipo MIME se deriva de la extensión del archivo. |
| `saveToSentItems`   | `booleano` | `$true`        | Si `$true` el mensaje enviado se guarda en *Elementos enviados*. Establécelo en `$false` para informes de alto volumen y evitar llenar el buzón.                                                                       |
| `TenantDisplayName` | `cadena`   | —              | Se muestra en el cuadro de información del tenant incrustado al final del área de contenido.                                                                                                                           |
| `ReportVersion`     | `cadena`   | —              | Se muestra en el cuadro de información del tenant (usa cadenas de versión semántica, números de compilación o un nombre de runbook + fecha).                                                                           |

### Opcional — Marca

| Parámetro     | Tipo          | Predeterminado               | Descripción                                                                                                                                                                                                                                                                                                                                      |
| ------------- | ------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `HeaderImage` | `cadena`      | incluido `Assets/Header.png` | Ruta local de archivo a un PNG/JPG/GIF que sobrescribe el gráfico de encabezado predeterminado. **El runbook debe resolver cualquier URL/blob a un archivo local con antelación** (por ejemplo, mediante `Get-AzStorageBlobContent`). Las sobreescrituras ausentes/ilegibles recurren al valor predeterminado incluido y emiten una advertencia. |
| `FooterImage` | `cadena`      | incluido `Assets/Footer.png` | Mismo tratamiento que `HeaderImage`. El pie de página se renderiza como una sola imagen clicable — cualquier texto de marca, logotipo o URL debe ir integrado en el PNG.                                                                                                                                                                         |
| `FooterLink`  | `cadena`      | `https://www.realmjoin.com`  | URL usada como `href` y `title` del enlace que envuelve la imagen del pie de página.                                                                                                                                                                                                                                                             |
| `NoHeader`    | `interruptor` | desactivado                  | Suprime por completo el gráfico del encabezado. Si se combina con `HeaderImage`, se emite una advertencia y la sobreescritura se ignora.                                                                                                                                                                                                         |
| `NoFooter`    | `interruptor` | desactivado                  | Suprime por completo el gráfico del pie de página y su enlace. Si se combina con `FooterImage` o un `FooterLink`personalizado, se emite una advertencia y esos valores se ignoran.                                                                                                                                                               |
| `AccentColor` | `cadena`      | `#f8842c`                    | *Nuevo en 0.8.9.* Color hexadecimal de 6 dígitos para las filas de encabezado de tablas, los botones de acción y los bordes de acento de los cuadros de información. Un valor vacío o mal formado emite una advertencia y vuelve al valor predeterminado.                                                                                        |
| `TextColor`   | `cadena`      | `#011e33`                    | *Nuevo en 0.8.9.* Color hexadecimal de 6 dígitos para el texto del cuerpo, los encabezados, los elementos de lista y el código. Mismo comportamiento de respaldo que `AccentColor`.                                                                                                                                                              |

**Dimensiones de imagen recomendadas:** PNG de 750 × 200 px. Esto coincide con el ancho del contenedor de correo y los valores predeterminados incluidos. Las relaciones de aspecto muy diferentes pueden verse distorsionadas en vistas estrechas. Cada gráfico debe quedarse muy por debajo de 3 MB — Graph limita el tamaño total de la `sendMail` solicitud a 4 MB y se emite una advertencia si cualquiera de las imágenes supera 3 MB.

**Colores:** sin `AccentColor`/`TextColor` el HTML generado es idéntico byte a byte a las versiones anteriores del módulo — los valores predeterminados son el naranja y el azul marino de RealmJoin. Los colores de estado (verde/rojo/ámbar) y los grises neutros no se parametrizan intencionadamente porque transmiten significado. Verifica los colores personalizados tanto en modo claro como oscuro: la tarjeta de contenido permanece blanca en modo oscuro, por lo que un color de texto muy claro se vuelve ilegible.

### Opcional — Control del tamaño de los adjuntos

*Nuevo en 0.8.9.* Graph rechaza toda la `sendMail` solicitud una vez que el mensaje supera \~4 MB. En lugar de hacer fallar el informe, la función puede recurrir a un conjunto de adjuntos más pequeño. Esta lógica antes estaba duplicada como el helper en línea del runbook `Send-RjRbGuardedReportEmail` y ahora forma parte de la propia función.

| Parámetro                 | Tipo           | Predeterminado             | Descripción                                                                                                                                                                                                                                                                        |
| ------------------------- | -------------- | -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `FallbackAttachments`     | `cadena[]`     | —                          | Conjunto de adjuntos más pequeño usado cuando el conjunto normal supera `MaxAttachmentBytes`, o cuando el envío con el conjunto normal falla para todos los destinatarios. Sin este parámetro no hay alternativa y un envío fallido lanza una excepción de inmediato.              |
| `FallbackMarkdownContent` | `cadena`       | valor de `MarkdownContent` | Cuerpo usado cuando se envía el conjunto alternativo — úsalo para explicar qué archivos se dejaron fuera y cómo obtenerlos.                                                                                                                                                        |
| `MaxAttachmentBytes`      | `entero largo` | `2.5 MB`                   | Presupuesto de tamaño bruto para el conjunto normal de adjuntos. Se mantiene con margen por debajo del límite de \~4 MB de Graph tras la codificación base64 (+33 %), el cuerpo HTML y las imágenes de marca en línea. Solo se evalúa cuando `FallbackAttachments` se proporciona. |

El control se ejecuta en dos etapas:

1. **Antes del envío** — si el conjunto normal supera el presupuesto, el conjunto alternativo se envía directamente y un mensaje indica ambos tamaños.
2. **Después de un envío fallido** — si el envío con el conjunto normal falla para *todos* destinatarios, se intenta un reintento con el conjunto alternativo antes de que la función lance una excepción.

### Opcional — Transporte

| Parámetro               | Tipo          | Predeterminado | Descripción                                                                                                                                                                                                                                     |
| ----------------------- | ------------- | -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `UseNativeGraphRequest` | `interruptor` | desactivado    | Envía mediante `Invoke-MgGraphRequest` (requiere `Microsoft.Graph` el módulo y una `Connect-MgGraph` sesión) en lugar de `Invoke-RjRbRestMethodGraph`. Úsalo cuando el runbook esté basado en el SDK nativo y no en el envoltorio de RealmJoin. |

## Ejemplos de uso

### Varios destinatarios

`EmailTo` acepta una sola cadena que contiene una o más direcciones separadas por comas. Cada dirección se recorta, se eliminan las entradas vacías y **se envía un correo individual por destinatario** — los destinatarios no se ven entre sí.

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

### Con adjuntos y metadatos del 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           "Inventario de dispositivos — $(Get-Date -Format 'yyyy-MM-dd')" `
    -MarkdownContent   $reportMd `
    -Attachments       @($csvPath, "$env:TEMP\\summary.xlsx") `
    -TenantDisplayName "Contoso Ltd" `
    -ReportVersion     "DeviceInventory v1.4.2"
```

Los archivos adjuntos se enumeran en un cuadro "Attached Files" al final del cuerpo del correo, además de agregarse como adjuntos reales al mensaje.

### Marca personalizada de encabezado/pie de página

Usa tu propia marca descargando primero los recursos a una ruta local y luego pasa las rutas resultantes. La función no obtiene URLs por sí misma.

```powershell
# Resuelve los recursos de marca desde Azure Blob Storage a la carpeta temporal del 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          "Informe con marca" `
    -MarkdownContent  $reportMd `
    -HeaderImage      $headerPath `
    -FooterImage      $footerPath `
    -FooterLink       "https://intranet.contoso.com/it-reports"
```

Si `$headerPath` falta o no se puede leer, la llamada sigue teniendo éxito — se usa el valor predeterminado incluido de RealmJoin y se registra una advertencia.

### Colores personalizados de la plantilla

Adapta el correo al diseño corporativo de un cliente. Ambos parámetros son independientes — sobrescribir solo el color de acento mantiene el color de texto predeterminado:

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

Un valor no válido (por ejemplo `azul` o `#05c`) no hace fallar el envío: una advertencia indica el parámetro y se usa el color predeterminado.

### Informes grandes con un conjunto alternativo de adjuntos

Genera un CSV y un libro de Excel, pero recurre solo al libro cuando el par supera el presupuesto de tamaño:

```powershell
La exportación CSV se omitió porque los adjuntos superaron el límite de tamaño del correo. El libro de Excel contiene los datos completos.

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

Runbooks que migran desde el helper en línea `Send-RjRbGuardedReportEmail` pueden eliminar esa función y renombrar la llamada a `Send-RjRbReportEmail` — los nombres de los parámetros (`Adjuntos`, `FallbackAttachments`, `FallbackMarkdownContent`, `MaxAttachmentBytes`) no cambian.

### Contenido plano (sin encabezado/pie de página)

Para notificaciones de estilo alerta que no deben parecer un correo promocional:

```powershell
Send-RjRbReportEmail `
    -EmailFrom       "realmjoin-report@contoso.com" `
    -EmailTo         "oncall@contoso.com" `
    -Subject         "[ALERTA] Se superó el umbral de licencias" `
    -MarkdownContent "## Se superó el umbral de licencias`n`nConsulta el panel para más detalles." `
    -NoHeader `
    -NoFooter
```

### Usando el SDK nativo de Microsoft.Graph

Si el runbook ya está autenticado mediante `Connect-MgGraph` (identidad administrada) y prefieres no mezclar el envoltorio de RealmJoin:

```powershell
Connect-MgGraph -Identity -NoWelcome

Send-RjRbReportEmail `
    -EmailFrom             "realmjoin-report@contoso.com" `
    -EmailTo               "alice@contoso.com" `
    -Subject               "Envío nativo de Graph" `
    -MarkdownContent       $reportMd `
    -UseNativeGraphRequest
```

### Leyendo el cuerpo del informe desde un archivo

Para informes más grandes, genera el Markdown en un archivo `.md` y léelo:

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

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

### Botones de acción (llamada a la acción)

Renderiza uno o más botones con marca añadiendo `{button}` a un enlace Markdown. Los botones colocados en la misma línea se agrupan en una sola fila:

```powershell
$reportMd = @"
# Solicitud de acceso

Una nueva solicitud de acceso al dispositivo está esperando tu decisión.

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

Send-RjRbReportEmail `
    -EmailFrom       "realmjoin-report@contoso.com" `
    -EmailTo         "approver@contoso.com" `
    -Subject         "Acción requerida: solicitud de acceso al dispositivo" `
    -MarkdownContent $reportMd
```

Cada botón es un hipervínculo normal con estilo CTA — seguro en todos los clientes, con esquinas redondeadas en los clientes modernos y esquinas cuadradas en Outlook Classic.

## Compatibilidad con Markdown

La función incluye un conversor ligero integrado de Markdown → HTML. **No se requiere ningún módulo externo de Markdown.** Sintaxis admitida:

| Markdown                                      | Notas                                                                                                                                                                                                                                                                                                                                                             |
| --------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `# … ######` encabezados                      | Los seis niveles. El espacio después de `#` es opcional. `h1` recibe un subrayado; el espaciado está ajustado para Outlook.                                                                                                                                                                                                                                       |
| `**negrita**`, `*cursiva*`, `~~tachado~~`     | Solo en línea (no debe abarcar varias líneas).                                                                                                                                                                                                                                                                                                                    |
| `` `inline code` ``                           | Renderizado como `<code>` con un fondo gris claro.                                                                                                                                                                                                                                                                                                                |
| bloques de código con delimitador lang ...    | La etiqueta de idioma se conserva como `class="language-…"`. También tolera delimitadores con un solo backtick malformados.                                                                                                                                                                                                                                       |
| `[text](url)` enlaces                         | Abrir en una nueva pestaña con `noopener noreferrer`.                                                                                                                                                                                                                                                                                                             |
| `[label](url){button}` botones de enlace      | Se muestra como un botón naranja de llamada a la acción con la marca, en lugar de un enlace simple. Varios `{button}` enlaces en la **misma línea** se muestran lado a lado en una sola fila (el ancho se divide por igual). Los bordes redondeados se ven en clientes modernos (New Outlook, OWA, móvil); Outlook clásico (motor Word) muestra bordes cuadrados. |
| `![alt](url)` imágenes                        | Se insertan como `<img>` (sin magia de adjunto en línea — la URL debe ser accesible por el cliente de correo).                                                                                                                                                                                                                                                    |
| `- elemento` / `1. elemento` listas           | Se admiten listas anidadas mediante una sangría de 2 espacios por nivel. La mezcla de listas ordenadas y no ordenadas cierra la lista anterior.                                                                                                                                                                                                                   |
| Elementos de lista multilínea                 | Una línea indentada y no vacía directamente debajo de un `<li>` se integra en el mismo elemento con un `<br>` salto de línea suave — no hace falta mantener cada elemento en una sola línea.                                                                                                                                                                      |
| `- [ ]` / `- [x]` listas de tareas            | Renderizado como `☐` / `☑` glifos Unicode (en verde cuando está marcado). `<input type="checkbox">` se evita intencionalmente porque Outlook clásico elimina los controles de formulario. La X mayúscula `[X]` también cuenta como marcado.                                                                                                                       |
| `> cita en bloque`                            | Se muestra con un borde izquierdo de color y un fondo sombreado.                                                                                                                                                                                                                                                                                                  |
| `> [!NOTE\|TIP\|IMPORTANT\|WARNING\|CAUTION]` | Advertencias al estilo GitHub. La primera línea del bloque de cita es el marcador (solo), las restantes `>`líneas prefijadas con - forman el cuerpo. Cada tipo obtiene su propio color de acento, glifo y barra de título.                                                                                                                                        |
| `---`, `***`, `___`                           | Regla horizontal.                                                                                                                                                                                                                                                                                                                                                 |
| `\|col\|col\|` tablas                         | Tablas estándar con barras verticales con `:---`, `:---:`, `---:` especificadores de alineación. Se requiere una fila de encabezado + separador.                                                                                                                                                                                                                  |
| `\\` escape                                   | `\*`, `\|` etc. se respetan para que puedan emitirse caracteres literales de Markdown.                                                                                                                                                                                                                                                                            |

Los elementos no admitidos incluyen notas al pie, listas de definición y paso a través de HTML — mantén el Markdown dentro de la tabla anterior.

## Comportamiento y manejo de errores

### Análisis de destinatarios

`EmailTo` se separa por comas, cada entrada se recorta y las entradas vacías se descartan. Si la lista resultante está vacía, la función arroja `No se encontraron destinatarios de correo electrónico válidos en el parámetro EmailTo.` antes de que se realice cualquier llamada a Graph.

### Errores por destinatario

Cada destinatario se envía de forma independiente. La función hace seguimiento de los éxitos y fracasos:

* Si **al menos uno** envíos tiene éxito pero otros fallan, se emite una advertencia que enumera las direcciones fallidas; la función devuelve normalmente.
* Si **todos** fallan, la función arroja `Error al enviar el correo electrónico a todos los destinatarios: …` por lo que el runbook falla de forma explícita.

### Errores en los archivos adjuntos

* Archivos faltantes (la ruta no existe) — se registran con detalle y se omiten silenciosamente.
* Archivos existentes pero no legibles (bloqueados, permiso denegado) — se emite una advertencia, se omiten, el resto de la llamada continúa.
* El cuadro "Archivos adjuntos" en la parte inferior del correo enumera solo los archivos adjuntos que se pudieron leer correctamente.

### Errores de sustitución de imagen

Ambos `HeaderImage` y `FooterImage` recurren a los valores predeterminados incluidos ante cualquier error (archivo faltante, error de E/S o un archivo que no sea una imagen válida). Una advertencia describe el fallo e identifica qué valor predeterminado se usó.

Desde la 0.8.9, el formato de la imagen se determina a partir de la **firma del archivo** (bytes mágicos) en lugar de la extensión del archivo. Un archivo que se llama `.png` pero en realidad contiene una página de error HTML — un resultado habitual cuando una descarga devuelve silenciosamente un documento de error — ahora se rechaza con una advertencia en lugar de producir un adjunto en línea roto. Por el contrario, un PNG válido guardado con una extensión engañosa se acepta y se tipa correctamente.

### Los colores no válidos

`AccentColor` y `TextColor` se validan frente a `^#[0-9A-Fa-f]{6}$`. Un valor que no coincida emite una advertencia que nombra el parámetro y el envío continúa con el color predeterminado. Los colores nunca son motivo para que un informe falle.

### Límite de tamaño total

Graph limita `sendMail` las solicitudes a \~4 MB combinados (cuerpo HTML + todos los adjuntos, codificados en base64). La función emite una advertencia cuando cualquiera de las imágenes de marca supera los 3 MB.

Cuando `FallbackAttachments` se proporciona, el control de tamaño de los adjuntos descrito en la sección de parámetros anterior maneja automáticamente las cargas útiles demasiado grandes. Sin una alternativa configurada, una solicitud demasiado grande falla en la llamada a Graph; considere:

* Proporcionar un `FallbackAttachments` conjunto (por ejemplo, el libro de Excel sin los archivos CSV sin procesar).
* Subir datos grandes al canal de Storage Account en su lugar — vea [Runbook Report Settings](/es/automatizacion/runbooks/runbook-report-settings.md#storage-account-delivery).
* Vincular adjuntos alojados externamente en lugar de incrustarlos.
* Comprimir datos tabulares (`Compress-Archive`) antes de adjuntarlos.

## Integración con la configuración del informe de Runbook

Los runbooks de informes no codifican la dirección del remitente ni la marca: declaran parámetros ocultos que el portal RealmJoin completa previamente desde el JSON central de personalización. Las configuraciones disponibles están documentadas en [Runbook Report Settings](/es/automatizacion/runbooks/runbook-report-settings.md).

La vinculación se realiza en el bloque `param()` del runbook mediante `Use-RJInterface -Type Setting`, y los parámetros se marcan `"Hide": true` en el `.INPUTS RunbookCustomization` bloque para que no saturen el formulario del portal:

```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 "No se ha configurado ningún EmailSender. Consulte https://docs.realmjoin.com/automation/runbooks/runbook-report-settings para obtener instrucciones de configuración."
}

# Descargar y validar las imágenes de marca una vez por ejecución; devuelve solo las claves
# que se resolvieron correctamente, de modo que las configuraciones no establecidas recurran a los valores predeterminados.
$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
```

Ver [Get-RjRbBrandingMailParams](/es/dev-reference/report-functions/get-rjrbbrandingmailparams.md) para las reglas de descarga, validación y limpieza.

## Salida

La función no devuelve nada si tiene éxito. Todo el progreso se escribe mediante `Write-RjRbLog -Verbose` (visible cuando el runbook se ejecuta con `-Verbose` o `$VerbosePreference = 'Continue'`). Las advertencias se fuerzan mediante `$WarningPreference = 'Continue'` independientemente de las anulaciones del lado del llamador, por lo que aparecen de forma fiable en el flujo de trabajo de Azure Automation.

## Ayudantes exportados relacionados

Los bloques de construcción detrás de `Send-RjRbReportEmail` ahora también se exportan desde el módulo, de modo que los runbooks puedan componer o previsualizar el HTML sin enviarlo:

| Función                                                                                          | Propósito                                                                                                                                                                                                                                                                                                                                                              |
| ------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [`Get-RjRbBrandingMailParams`](/es/dev-reference/report-functions/get-rjrbbrandingmailparams.md) | Convierte las configuraciones del inquilino RJReport.Branding.\* en parámetros listos para splatting: descarga y valida las imágenes, y pasa los colores y el enlace del pie de página. `RJReport.Branding.*` las configuraciones del inquilino en parámetros listos para splatting: descarga y valida las imágenes, y pasa los colores y el enlace del pie de página. |
| `ConvertFrom-RjRbMarkdownToHtml`                                                                 | Conversor Markdown → HTML independiente (el mismo motor ligero usado internamente, incluida la `{button}` sintaxis). Acepta `-AccentColor`/`-TextColor`.                                                                                                                                                                                                               |
| `Get-RjRbReportEmailBody`                                                                        | Compone el cuerpo HTML completo con la marca (encabezado/pie, cuadro de información del inquilino, lista de adjuntos) a partir de HTML o Markdown — útil para renderizar e inspeccionar el correo antes de enviarlo. Acepta `-AccentColor`/`-TextColor`.                                                                                                               |
| `Resolve-RjRbImageSource`                                                                        | Resuelve una ruta de imagen de encabezado/pie a su fuente CID en línea. Valida mediante la firma del archivo y arroja un error si no es un PNG, JPEG o GIF.                                                                                                                                                                                                            |

A excepción de `Get-RjRbBrandingMailParams`, están destinados principalmente a escenarios avanzados/de prueba; la vía normal es llamar a `Send-RjRbReportEmail` directamente.

## Véase también

* [Get-RjRbBrandingMailParams](/es/dev-reference/report-functions/get-rjrbbrandingmailparams.md) — resolviendo la configuración de marca del inquilino dentro de un runbook.
* [Runbook Report Settings](/es/automatizacion/runbooks/runbook-report-settings.md) — configuración central del buzón del remitente, información del servicio de asistencia, marca y canal de entrega de Storage Account.
* Microsoft Graph: [Enviar correo](https://learn.microsoft.com/en-us/graph/api/user-sendmail) — API subyacente.


---

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