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

# Send-RjRbReportEmail

Enviar e-mails de relatório HTML com marca a partir de runbooks do Azure Automation através do Microsoft Graph usando conteúdo Markdown.

## Visão geral

`Send-RjRbReportEmail` é a função auxiliar padrão para entregar emails de relatório a partir de runbooks de relatório do RealmJoin. Ela pega conteúdo Markdown, converte-o em um email HTML responsivo com a marca RealmJoin, anexa arquivos opcionais e gráficos de branding embutidos (cabeçalho/rodapé) e envia o resultado através do Microsoft Graph `sendMail` endpoint.

> **Renomeado nesta versão.** A função foi renomeada de `Send-RjReportEmail` para `Send-RjRbReportEmail` para consistência de nomenclatura com o restante do módulo (`*-RjRb*`). O nome antigo `Send-RjReportEmail` é exportado como um alias compatível com versões anteriores, então os runbooks existentes continuam funcionando inalterados — mas novos runbooks devem chamar `Send-RjRbReportEmail`.

Principais características:

* **Markdown entra, HTML sai** — os runbooks compõem o corpo do relatório em Markdown; a função o renderiza para HTML temático que funciona no Outlook Classic, no New Outlook, no Outlook Web, em clientes móveis e no modo escuro.
* **Um email por destinatário** — quando vários destinatários são fornecidos, a função envia uma mensagem individual para cada endereço em vez de um único email com vários destinatários. Este é um design de privacidade/com BCC por padrão.
* **Cabeçalho e rodapé com branding embutidos** — os ativos PNG incluídos são enviados como anexos CID e referenciados pelo HTML incorporado. Ambos podem ser substituídos ou suprimidos por completo.
* **Cores do template personalizáveis** — a cor de destaque e a cor do texto do template podem ser substituídas em cada chamada, para que os emails de relatório possam seguir o design corporativo de um cliente.
* **Proteção de tamanho de anexos integrada** — um conjunto opcional de anexos de fallback menor é enviado automaticamente quando o conjunto regular excede o orçamento de tamanho ou sua tentativa de envio falha.
* **Conexão automática** — se nenhuma sessão do Graph estiver ativa, a função chama transparentemente `Connect-RjRbGraph` (ou `Connect-MgGraph -Identity` quando `-UseNativeGraphRequest` estiver definido).
* **Resiliente** — leituras de anexos com falha, substituições de imagem inválidas, cores inválidas ou falhas de sendMail por destinatário são relatadas, mas não abortam todo o lote, a menos que *todos os* destinatários falhem.

As definições centralizadas de email (endereço do remetente, informações do service desk) estão documentadas em [Configurações de Relatório do Runbook](/pt/automatizacao/runbooks/runbook-report-settings.md) — este documento concentra-se em chamar a função a partir de um runbook.

## Pré-requisitos

### Caixa de correio do remetente

É necessária uma caixa de correio licenciada do Microsoft 365 (normalmente uma caixa partilhada dedicada, como `realmjoin-report@contoso.com`) é necessária como o endereço `De` . A identidade gerida da Automation Account deve ter permissão para enviar em nome dessa caixa de correio através do Graph `Mail.Send` permissão de aplicação (com escopo via RBAC for Applications se quiser restringir a identidade a uma única caixa de correio).

> **O remetente não pode ser um grupo do Microsoft 365.** A função envia através do endpoint Graph `/users/{EmailFrom}/sendMail` — um grupo do Microsoft 365 não é um objeto de utilizador, portanto a chamada falha. Use um utilizador ou uma caixa partilhada.
>
> Endereços de grupos do Microsoft 365 como **destinatários** são tecnicamente aceites, mas **não recomendados**: a mensagem pode chegar apenas à caixa de correio do grupo (os membros recebem uma cópia pessoal apenas se seguirem o grupo), a gestão de entrega do grupo pode rejeitar o remetente e as falhas de entrega aparecem apenas como um NDR na caixa de correio do remetente — o próprio runbook continua a reportar sucesso. Prefira endereços de caixas de correio individuais.

### Permissões do Graph

| Cenário                               | Permissão necessária                                        |
| ------------------------------------- | ----------------------------------------------------------- |
| Padrão (`Invoke-RjRbRestMethodGraph`) | `Mail.Send` (Application) na caixa de correio do remetente  |
| Com `-UseNativeGraphRequest`          | Igual — a chamada continua a atingir `/users/{id}/sendMail` |

### Conectividade do módulo

Por padrão, a função usa `Invoke-RjRbRestMethodGraph` deste módulo. Se nenhuma ligação estiver ativa, liga-se automaticamente via `Connect-RjRbGraph`. Quando `-UseNativeGraphRequest` estiver definido, a função verifica em vez disso `Get-MgContext` e chama `Connect-MgGraph -Identity -NoWelcome` conforme necessário.

## Início rápido

A chamada mínima viável requer apenas o remetente, o destinatário, um assunto e o corpo em Markdown:

```powershell
Send-RjRbReportEmail `
    -EmailFrom "realmjoin-report@contoso.com" `
    -EmailTo   "alice@contoso.com" `
    -Subject   "Weekly Report" `
    -MarkdownContent @"
# Relatório semanal

Olá, Alice,

aqui estão os números desta semana:

- Novos dispositivos inscritos: **42**
- Conformidade de licenças: **98%**
"@
```

Isto produz um email RealmJoin totalmente com branding, com o cabeçalho e rodapé padrão, suporte para modo claro/escuro e o bloco de tenant/versão no rodapé.

## Parâmetros

### Obrigatório

| Parâmetro         | Tipo     | Descrição                                                                                                                                                                                                                                                                                 |
| ----------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `EmailFrom`       | `string` | Nome principal do utilizador ou ID do objeto da caixa de correio do remetente. Usado como `/users/{id}/sendMail`. Deve ser um utilizador ou uma caixa partilhada — um grupo do Microsoft 365 não é um objeto de utilizador e o envio falha.                                               |
| `EmailTo`         | `string` | Endereço do destinatário. **String única** — vários endereços são passados como uma lista separada por vírgulas, veja abaixo. Endereços de grupos do Microsoft 365 são aceites, mas não recomendados — a entrega aos membros não é garantida e as falhas não são visíveis para o runbook. |
| `Subject`         | `string` | Linha de assunto. Também é injetada no HTML `<title>` elemento.                                                                                                                                                                                                                           |
| `MarkdownContent` | `string` | Corpo do relatório em Markdown. Veja [Suporte a Markdown](#markdown-support) para a sintaxe suportada.                                                                                                                                                                                    |

### Opcional — Conteúdo

| Parâmetro           | Tipo       | Padrão  | Descrição                                                                                                                                                                                           |
| ------------------- | ---------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Anexos`            | `string[]` | `@()`   | Caminhos de ficheiros locais a anexar. Ficheiros em falta são registados e ignorados, ficheiros ilegíveis emitem um aviso, mas não abortam o envio. O tipo MIME é derivado da extensão do ficheiro. |
| `saveToSentItems`   | `bool`     | `$true` | Se `$true` a mensagem enviada é mantida na *Itens Enviados*. Defina como `$false` para relatórios de grande volume, para evitar encher a caixa de correio.                                          |
| `TenantDisplayName` | `string`   | —       | Mostrado na caixa de informações do tenant incorporada no final da área de conteúdo.                                                                                                                |
| `ReportVersion`     | `string`   | —       | Mostrado na caixa de informações do tenant (use cadeias de versão semântica, números de compilação ou um nome de runbook + data).                                                                   |

### Opcional — Branding

| Parâmetro     | Tipo          | Padrão                       | Descrição                                                                                                                                                                                                                                                                                                            |
| ------------- | ------------- | ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `HeaderImage` | `string`      | incluído `Assets/Header.png` | Caminho local de ficheiro para um PNG/JPG/GIF que substitui o gráfico de cabeçalho predefinido. **O runbook deve resolver previamente qualquer URL/blob para um ficheiro local** (por exemplo, via `Get-AzStorageBlobContent`). As substituições em falta/ilegíveis recuam para o padrão incluído e emitem um aviso. |
| `FooterImage` | `string`      | incluído `Assets/Footer.png` | Mesmo tratamento que `HeaderImage`. O rodapé é renderizado como uma única imagem clicável — qualquer texto de branding, logótipo ou URL deve estar incorporado no PNG.                                                                                                                                               |
| `FooterLink`  | `string`      | `https://www.realmjoin.com`  | URL usada como o `href` e `title` da âncora que envolve a imagem do rodapé.                                                                                                                                                                                                                                          |
| `NoHeader`    | `interruptor` | desativado                   | Suprime totalmente o gráfico de cabeçalho. Se combinado com `HeaderImage`, é emitido um aviso e a substituição é ignorada.                                                                                                                                                                                           |
| `NoFooter`    | `interruptor` | desativado                   | Suprime totalmente o gráfico de rodapé e o respetivo link. Se combinado com `FooterImage` ou um personalizado `FooterLink`, é emitido um aviso e esses valores são ignorados.                                                                                                                                        |
| `AccentColor` | `string`      | `#f8842c`                    | *Novo em 0.8.9.* Cor hexadecimal de 6 dígitos para linhas de cabeçalho de tabelas, botões de ação e as bordas de destaque das caixas de informação. Um valor vazio ou malformado emite um aviso e recorre ao padrão.                                                                                                 |
| `TextColor`   | `string`      | `#011e33`                    | *Novo em 0.8.9.* Cor hexadecimal de 6 dígitos para o texto do corpo, títulos, itens de lista e código. Mesmo comportamento de fallback que `AccentColor`.                                                                                                                                                            |

**Dimensões recomendadas da imagem:** PNG de 750 × 200 px. Isto corresponde à largura do contentor do email e aos padrões incluídos. Proporções significativamente diferentes podem parecer distorcidas em vistas estreitas. Cada gráfico deve ficar bem abaixo de 3 MB — o Graph limita o total `sendMail` da requisição a 4 MB e é emitido um aviso se qualquer uma das imagens exceder 3 MB.

**Cores:** sem `AccentColor`/`TextColor` o HTML gerado é idêntico byte a byte às versões anteriores do módulo — os padrões são o laranja e o azul-marinho do RealmJoin. As cores de estado (verde/vermelho/âmbar) e os cinzentos neutros não são intencionalmente parametrizados porque transmitem significado. Verifique as cores personalizadas tanto no modo claro como no escuro: o cartão de conteúdo mantém-se branco no modo escuro, pelo que uma cor de texto muito clara se torna ilegível.

### Opcional — Proteção do tamanho dos anexos

*Novo em 0.8.9.* O Graph rejeita toda a `sendMail` requisição quando a mensagem excede \~4 MB. Em vez de falhar o relatório, a função pode recorrer a um conjunto de anexos menor. Esta lógica era anteriormente duplicada como o helper inline do runbook `Send-RjRbGuardedReportEmail` e agora faz parte da própria função.

| Parâmetro                 | Tipo       | Padrão                     | Descrição                                                                                                                                                                                                                                                      |
| ------------------------- | ---------- | -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `FallbackAttachments`     | `string[]` | —                          | Conjunto de anexos menor usado quando o conjunto regular excede `MaxAttachmentBytes`, ou quando o envio com o conjunto regular falha para todos os destinatários. Sem este parâmetro não há fallback e um envio falhado lança imediatamente.                   |
| `FallbackMarkdownContent` | `string`   | valor de `MarkdownContent` | Corpo usado quando o conjunto de fallback é enviado — use-o para explicar quais ficheiros foram omitidos e como obtê-los.                                                                                                                                      |
| `MaxAttachmentBytes`      | `longo`    | `2.5MB`                    | Orçamento de tamanho bruto para o conjunto regular de anexos. Mantém-se com segurança abaixo do limite do Graph de \~4 MB após codificação base64 (+33 %), corpo HTML e imagens de branding embutidas. Só é avaliado quando `FallbackAttachments` é fornecido. |

A proteção funciona em duas etapas:

1. **Antes do envio** — se o conjunto regular exceder o orçamento, o conjunto de fallback é enviado diretamente e uma mensagem indica ambos os tamanhos.
2. **Após um envio falhado** — se o envio com o conjunto regular falhar para *todos os* destinatários, é feita uma nova tentativa com o conjunto de fallback antes de a função lançar.

### Opcional — Transporte

| Parâmetro               | Tipo          | Padrão     | Descrição                                                                                                                                                                                                                                |
| ----------------------- | ------------- | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `UseNativeGraphRequest` | `interruptor` | desativado | Envia via `Invoke-MgGraphRequest` (requer `Microsoft.Graph` módulo e uma `Connect-MgGraph` sessão) em vez de `Invoke-RjRbRestMethodGraph`. Use isto quando o runbook é construído em torno do SDK nativo em vez do wrapper do RealmJoin. |

## Exemplos de utilização

### Vários destinatários

`EmailTo` aceita uma única string contendo um ou mais endereços separados por vírgulas. Cada endereço é aparado, as entradas vazias são removidas e **é enviado um email individual por destinatário** — os destinatários não se veem entre si.

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

### Com anexos e metadados do 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           "Inventário de dispositivos — $(Get-Date -Format 'yyyy-MM-dd')" `
    -MarkdownContent   $reportMd `
    -Attachments       @($csvPath, "$env:TEMP\\summary.xlsx") `
    -TenantDisplayName "Contoso Ltd" `
    -ReportVersion     "DeviceInventory v1.4.2"
```

Os ficheiros anexados são listados numa caixa "Ficheiros anexados" no final do corpo do email, além de serem adicionados como anexos reais à mensagem.

### Branding personalizado de cabeçalho/rodapé

Traga o seu próprio branding descarregando primeiro os ativos para um caminho local e depois passe os caminhos resultantes. A função não obtém URLs por si mesma.

```powershell
# Resolver ativos de branding do Azure Blob Storage para a pasta temporária do 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          "Relatório com branding" `
    -MarkdownContent  $reportMd `
    -HeaderImage      $headerPath `
    -FooterImage      $footerPath `
    -FooterLink       "https://intranet.contoso.com/it-reports"
```

Se `$headerPath` está em falta ou é ilegível, a chamada ainda é bem-sucedida — o padrão incluído do RealmJoin é usado e um aviso é registado.

### Cores personalizadas do template

Adapte o email ao design corporativo de um cliente. Ambos os parâmetros são independentes — ao substituir apenas a cor de destaque, mantém-se a cor de texto predefinida:

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

Um valor inválido (por exemplo `azul` ou `#05c`) não faz o envio falhar: um aviso indica o parâmetro e é usada a cor predefinida.

### Relatórios grandes com um conjunto de anexos de fallback

Gere um CSV e um livro do Excel, mas recorra apenas ao livro quando o par exceder o orçamento de tamanho:

```powershell
$sizeHint = "A exportação CSV foi omitida porque os anexos excederam o limite de tamanho do email. O livro do Excel contém os dados completos."

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

Runbooks que migram do helper inline `Send-RjRbGuardedReportEmail` podem remover essa função e renomear a chamada para `Send-RjRbReportEmail` — os nomes dos parâmetros (`Anexos`, `FallbackAttachments`, `FallbackMarkdownContent`, `MaxAttachmentBytes`) não se alteram.

### Conteúdo simples (sem cabeçalho/rodapé)

Para notificações do tipo alerta que não devem parecer um email de marketing:

```powershell
Send-RjRbReportEmail `
    -EmailFrom       "realmjoin-report@contoso.com" `
    -EmailTo         "oncall@contoso.com" `
    -Subject         "[ALERTA] Limite de licenças excedido" `
    -MarkdownContent "## Limite de licenças excedido`n`nConsulte o painel para detalhes." `
    -NoHeader `
    -NoFooter
```

### Usando o SDK nativo do Microsoft.Graph

Se o runbook já estiver autenticado através de `Connect-MgGraph` (identidade gerida) e preferir não misturar o wrapper do RealmJoin:

```powershell
Connect-MgGraph -Identity -NoWelcome

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

### Ler o corpo do relatório a partir de um ficheiro

Para relatórios maiores, gere o Markdown para um `.md` ficheiro e leia-o:

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

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

### Botões de ação (call-to-action)

Renderize um ou mais botões com branding acrescentando `{button}` a uma ligação Markdown. Botões colocados na mesma linha são agrupados numa única linha:

```powershell
$reportMd = @"
# Pedido de acesso

Um novo pedido de acesso a um dispositivo aguarda a sua decisão.

[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         "Ação necessária: pedido de acesso a dispositivo" `
    -MarkdownContent $reportMd
```

Cada botão é uma hiperligação normal estilizada como CTA — segura em todos os clientes, com cantos arredondados em clientes modernos e cantos quadrados no Outlook Classic.

## Suporte a Markdown

A função inclui um conversor leve de Markdown → HTML incorporado. **Não é necessário qualquer módulo externo de Markdown.** Sintaxe suportada:

| Markdown                                      | Notas                                                                                                                                                                                                                                                                                                                                                                |
| --------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `# … ######` cabeçalhos                       | Todos os seis níveis. Espaço depois `#` é opcional. `h1` recebe um sublinhado; o espaçamento é ajustado para o Outlook.                                                                                                                                                                                                                                              |
| `**bold**`, `*italic*`, `~~strike~~`          | Apenas inline (não deve abranger várias linhas).                                                                                                                                                                                                                                                                                                                     |
| `` `inline code` ``                           | Renderizado como `<code>` com fundo cinza claro.                                                                                                                                                                                                                                                                                                                     |
| blocos de código delimitados com lang ...     | A etiqueta de idioma é preservada como `class="language-…"`. Também tolera delimitadores malformados de crase única.                                                                                                                                                                                                                                                 |
| `[text](url)` hiperligações                   | Abrir em nova aba com `noopener noreferrer`.                                                                                                                                                                                                                                                                                                                         |
| `[label](url){button}` botões de link         | Renderizado como um botão laranja de chamada para ação com marca, em vez de um link simples. Vários `{button}` links na **mesma linha** são renderizados lado a lado em uma única linha (a largura é dividida igualmente). Cantos arredondados aparecem em clientes modernos (Novo Outlook, OWA, mobile); o Outlook Classic (motor Word) renderiza cantos quadrados. |
| `![alt](url)` imagens                         | Inseridas como `<img>` (sem mágica de anexo inline — a URL deve estar acessível ao cliente de e-mail).                                                                                                                                                                                                                                                               |
| `- item` / `1. item` listas                   | Listas aninhadas são suportadas por meio de indentação de 2 espaços por nível. Misturar listas ordenadas e não ordenadas encerra a lista anterior.                                                                                                                                                                                                                   |
| Itens de lista em várias linhas               | Uma linha indentada e não vazia diretamente abaixo de um `<li>` é incorporada ao mesmo item com uma `<br>` quebra suave — não é necessário manter cada item em uma única linha.                                                                                                                                                                                      |
| `- [ ]` / `- [x]` listas de tarefas           | Renderizado como `☐` / `☑` glifos Unicode (verdes quando marcados). `<input type="checkbox">` é evitado intencionalmente porque o Outlook Classic remove controles de formulário. Maiúsculo `[X]` também conta como marcado.                                                                                                                                         |
| `> citação em bloco`                          | Renderizado com borda esquerda colorida e fundo sombreado.                                                                                                                                                                                                                                                                                                           |
| `> [!NOTE\|TIP\|IMPORTANT\|WARNING\|CAUTION]` | advertências no estilo GitHub. A primeira linha da citação em bloco é o marcador (sozinho), as linhas restantes `>`com prefixo - são o corpo. Cada tipo recebe sua própria cor de destaque, glifo e barra de título.                                                                                                                                                 |
| `---`, `***`, `___`                           | Regra horizontal.                                                                                                                                                                                                                                                                                                                                                    |
| `\|col\|col\|` tabelas                        | Tabelas padrão com barras verticais com `:---`, `:---:`, `---:` especificadores de alinhamento. Linha de cabeçalho + separador necessários.                                                                                                                                                                                                                          |
| `\\` escape                                   | `\*`, `\|` etc. são respeitados para que caracteres literais de Markdown possam ser emitidos.                                                                                                                                                                                                                                                                        |

Itens não suportados incluem notas de rodapé, listas de definições e passagem direta de HTML — mantenha o Markdown na tabela acima.

## Comportamento e tratamento de erros

### Análise de destinatários

`EmailTo` é dividido por vírgulas, cada entrada é aparada e entradas vazias são descartadas. Se a lista resultante estiver vazia, a função lança `Nenhum destinatário de e-mail válido encontrado no parâmetro EmailTo.` antes de qualquer chamada ao Graph ser feita.

### Falhas por destinatário

Cada destinatário é enviado de forma independente. A função rastreia sucessos e falhas:

* Se **pelo menos um** envio é bem-sucedido, mas outros falham, é emitido um aviso listando os endereços com falha; a função retorna normalmente.
* Se **todos os** envios falharem, a função lança `Falha ao enviar e-mail para todos os destinatários: …` para que o runbook falhe de forma explícita.

### Falhas de anexo

* Arquivos ausentes (o caminho não existe) — registrados de forma verbosa, ignorados silenciosamente.
* Arquivos existentes, mas ilegíveis (bloqueados, permissão negada) — aviso emitido, ignorados, o restante da chamada prossegue.
* A caixa "Attached Files" na parte inferior do e-mail lista apenas os anexos que foram lidos com sucesso.

### Falhas de substituição de imagem

Ambos `HeaderImage` e `FooterImage` fazem fallback para os padrões incluídos em qualquer erro (arquivo ausente, erro de IO ou um arquivo que não seja uma imagem válida). Um aviso descreve a falha e identifica qual padrão foi usado.

Desde 0.8.9 o formato da imagem é determinado pela **assinatura do arquivo** (bytes mágicos) em vez da extensão do arquivo. Um arquivo nomeado `.png` mas que na verdade contém uma página de erro HTML — um resultado comum quando um download retorna silenciosamente um documento de erro — agora é rejeitado com um aviso em vez de produzir um anexo inline quebrado. Por outro lado, um PNG válido salvo com uma extensão enganosa é aceito e tipado corretamente.

### Cores inválidas

`AccentColor` e `TextColor` são validadas em relação a `^#[0-9A-Fa-f]{6}$`. Um valor que não corresponde emite um aviso nomeando o parâmetro e o envio prossegue com a cor padrão. As cores nunca são motivo para um relatório falhar.

### Limite de tamanho total

O Graph limita `sendMail` as solicitações em cerca de 4 MB no total (corpo HTML + todos os anexos, codificados em base64). A função emite um aviso quando qualquer imagem de marca excede 3 MB.

Quando `FallbackAttachments` é fornecido, a proteção de tamanho dos anexos descrita na seção de parâmetros acima trata cargas úteis de tamanho excessivo automaticamente. Sem um conjunto de fallback, uma solicitação de tamanho excessivo falha na chamada ao Graph; considere:

* Fornecendo um `FallbackAttachments` conjunto (por exemplo, a pasta de trabalho do Excel sem os arquivos CSV brutos).
* Carregar grandes volumes de dados para o canal Storage Account em vez disso — veja [Configurações de Relatório do Runbook](/pt/automatizacao/runbooks/runbook-report-settings.md#storage-account-delivery).
* Criar links para anexos hospedados externamente em vez de incorporá-los.
* Comprimir dados tabulares (`Compress-Archive`) antes de anexar.

## Integração com as configurações de relatório do runbook

Runbooks de relatório não codificam de forma fixa o endereço do remetente nem a marca: eles declaram parâmetros ocultos que o portal RealmJoin preenche previamente a partir do JSON central de personalização. As configurações disponíveis estão documentadas em [Configurações de Relatório do Runbook](/pt/automatizacao/runbooks/runbook-report-settings.md).

A associação acontece no `bloco param() do runbook` por meio de `Use-RJInterface -Type Setting`, e os parâmetros são marcados `"Hide": true` no `.INPUTS RunbookCustomization` bloco para não poluírem o formulário do 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 "Nenhum EmailSender configurado. Veja https://docs.realmjoin.com/automation/runbooks/runbook-report-settings para instruções de configuração."
}

# Baixa e valida as imagens de marca uma vez por execução; retorna apenas as chaves
# que foram resolvidas com êxito, para que configurações não definidas caiam nos padrões.
$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
```

Veja [Get-RjRbBrandingMailParams](/pt/dev-reference/report-functions/get-rjrbbrandingmailparams.md) para as regras de download, validação e limpeza.

## Saídas

A função não retorna nada em caso de sucesso. Todo o progresso é escrito por meio de `Write-RjRbLog -Verbose` (visível quando o runbook é executado com `-Verbose` ou `$VerbosePreference = 'Continue'`). Os avisos são forçados por meio de `$WarningPreference = 'Continue'` independentemente de substituições do lado do chamador, para que apareçam de forma confiável no fluxo de trabalhos do Azure Automation.

## Helpers exportados relacionados

Os blocos de construção por trás de `Send-RjRbReportEmail` também são agora exportados do módulo, para que os runbooks possam compor ou pré-visualizar o HTML sem enviar:

| Função                                                                                           | Propósito                                                                                                                                                                                                                                 |
| ------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [`Get-RjRbBrandingMailParams`](/pt/dev-reference/report-functions/get-rjrbbrandingmailparams.md) | Converte as `RJReport.Branding.*` configurações do Tenant em parâmetros prontos para splat: baixa e valida as imagens, repassa as cores e o link do rodapé.                                                                               |
| `ConvertFrom-RjRbMarkdownToHtml`                                                                 | Conversor autônomo de Markdown → HTML (o mesmo motor leve usado internamente, incluindo a `{button}` sintaxe). Aceita `-AccentColor`/`-TextColor`.                                                                                        |
| `Get-RjRbReportEmailBody`                                                                        | Monta o corpo HTML completo com marca (cabeçalho/rodapé, caixa de informações do Tenant, lista de anexos) a partir de HTML ou Markdown — útil para renderizar e inspecionar o e-mail antes de enviar. Aceita `-AccentColor`/`-TextColor`. |
| `Resolve-RjRbImageSource`                                                                        | Resolve um caminho de imagem de cabeçalho/rodapé para sua origem CID inline. Valida pela assinatura do arquivo e lança erro em qualquer coisa que não seja PNG, JPEG ou GIF.                                                              |

Exceto por `Get-RjRbBrandingMailParams`, `Send-RjRbReportEmail` diretamente.

## Veja também

* [Get-RjRbBrandingMailParams](/pt/dev-reference/report-functions/get-rjrbbrandingmailparams.md) — resolução das configurações de marca do Tenant dentro de um runbook.
* [Configurações de Relatório do Runbook](/pt/automatizacao/runbooks/runbook-report-settings.md) — configuração central da caixa de correio do remetente, informações do service desk, marca e canal de entrega do Storage Account.
* Microsoft Graph: [Enviar e-mail](https://learn.microsoft.com/en-us/graph/api/user-sendmail) — API subjacente.


---

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