> 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

## Visão geral

`Send-RjRbReportEmail` é o auxiliar padrão para entregar e-mails de relatório a partir de runbooks de relatórios do RealmJoin. Recebe conteúdo Markdown, converte-o num e-mail HTML responsivo com a marca RealmJoin, anexa ficheiros opcionais e gráficos de marcação inline (cabeçalho/rodapé) e envia o resultado através do Microsoft Graph `sendMail` ponto de extremidade.

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

Características principais:

* **Markdown entra, HTML sai** — os runbooks compõem o corpo do relatório em Markdown; a função o renderiza em HTML temático que funciona no Outlook Classic, no Novo Outlook, no Outlook Web, em clientes móveis e no modo escuro.
* **Um e-mail por destinatário** — quando são fornecidos vários destinatários, a função envia uma mensagem individual para cada endereço em vez de um único e-mail com vários destinatários. Esta é uma conceção de privacidade/BCC por padrão.
* **Cabeçalho e rodapé com marca embutidos** — os recursos 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 modelo personalizáveis** — a cor de destaque e a cor do texto do modelo podem ser substituídas por chamada, para que os e-mails de relatório possam seguir o design corporativo de um cliente.
* **Proteção integrada do tamanho dos anexos** — um conjunto alternativo de anexos mais pequeno opcional é enviado automaticamente quando o conjunto normal excede o orçamento de tamanho ou quando a tentativa de envio falha.
* **Ligação automática** — se nenhuma sessão do Graph estiver ativa, a função chama transparentemente `Connect-RjRbGraph` (ou `Connect-MgGraph -Identity` quando `-UseNativeGraphRequest` está 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 comunicadas, mas não interrompem todo o lote, a menos que *todos* os destinatários falhem.

As definições centralizadas de e-mail (endereço do remetente, informações do service desk) estão documentadas em [Runbook Report Settings](/pt/automatizacao/runbooks/runbook-report-settings.md) — este documento foca-se na chamada da 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`) como `From` endereço. A identidade gerida da Automation Account deve ter permissão para enviar em nome dessa caixa de correio através da permissão de aplicação Mail.Send do Graph (com escopo via RBAC para Applications se quiser restringir a identidade a uma única caixa de correio). `Mail.Send` permissão de aplicação (com escopo via RBAC para Applications se quiser restringir a identidade a uma única caixa de correio).

### Permissões do Graph

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

### Conectividade do módulo

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

## Início rápido

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

```powershell
Send-RjRbReportEmail `
    -EmailFrom "realmjoin-report@contoso.com" `
    -EmailTo   "alice@contoso.com" `
    -Subject   "Relatório semanal" `
    -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 e-mail RealmJoin totalmente com marca, com o cabeçalho e rodapé predefinidos, 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 de utilizador ou ID de objeto da caixa de correio do remetente. Usado como `/users/{id}/sendMail`.                               |
| `EmailTo`         | `string` | Endereço do destinatário. **Uma única cadeia de caracteres** — vários endereços são passados como uma lista separada por vírgulas, veja abaixo. |
| `Subject`         | `string` | Linha de assunto. Também é inserida no elemento HTML `<title>` .                                                                                |
| `MarkdownContent` | `string` | Corpo do relatório em Markdown. Veja [Suporte a Markdown](#markdown-support) para a sintaxe suportada.                                          |

### Opcional — Conteúdo

| Parâmetro           | Tipo       | Predefinição | Descrição                                                                                                                                                                                                    |
| ------------------- | ---------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `Anexos`            | `string[]` | `@()`        | Caminhos locais de ficheiros a anexar. Os ficheiros em falta são registados e ignorados; os ficheiros ilegíveis geram um aviso, mas não interrompem o envio. O tipo MIME é derivado da extensão do ficheiro. |
| `saveToSentItems`   | `bool`     | `$true`      | Se `$true` a mensagem enviada for mantida nos *Itens Enviados*da caixa de correio do remetente. Defina como `$false` para relatórios de alto volume, para evitar encher a caixa de correio.                  |
| `TenantDisplayName` | `string`   | —            | Mostrado na caixa de informações do tenant incorporada no fim 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 do runbook + data).                                                                            |

### Opcional — Branding

| Parâmetro     | Tipo     | Predefinição                 | Descrição                                                                                                                                                                                                                                                                                         |
| ------------- | -------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `HeaderImage` | `string` | incluído `Assets/Header.png` | Caminho local 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 ex., via `Get-AzStorageBlobContent`). Substituições ausentes/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 marca, 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`    | `switch` | desativado                   | Suprime por completo o gráfico do cabeçalho. Se combinado com `HeaderImage`, emite-se um aviso e a substituição é ignorada.                                                                                                                                                                       |
| `NoFooter`    | `switch` | desativado                   | Suprime por completo o gráfico do rodapé e o respetivo link. Se combinado com `FooterImage` ou um `FooterLink`, emite-se um aviso e esses valores são ignorados.                                                                                                                                  |
| `AccentColor` | `string` | `#f8842c`                    | *Novo na versão 0.8.9.* Cor hexadecimal de 6 dígitos para as linhas de cabeçalho das 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 recua para o padrão.                                                                 |
| `TextColor`   | `string` | `#011e33`                    | *Novo na versão 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 de imagem recomendadas:** PNG de 750 × 200 px. Isto corresponde à largura do contentor do e-mail e aos padrões incluídos. Proporções significativamente diferentes podem parecer distorcidas em ecrãs estreitos. Cada gráfico deve ficar bem abaixo de 3 MB — o Graph limita o pedido total a 4 MB e é emitido um aviso se qualquer uma das imagens exceder 3 MB. `sendMail` pedido 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 parametrizados intencionalmente porque transmitem significado. Verifique as cores personalizadas tanto no modo claro como no escuro: o cartão de conteúdo permanece branco no modo escuro, portanto uma cor de texto muito clara torna-se ilegível.

### Opcional — proteção contra tamanho dos anexos

*Novo na versão 0.8.9.* Graph rejeita todo o `sendMail` pedido assim que a mensagem excede \~4 MB. Em vez de falhar o relatório, a função pode recuar para um conjunto de anexos mais pequeno. Esta lógica era anteriormente duplicada como o auxiliar inline do runbook `Send-RjRbGuardedReportEmail` e agora faz parte da própria função.

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

A proteção funciona em duas fases:

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

### Opcional — Transporte

| Parâmetro               | Tipo     | Predefinição | Descrição                                                                                                                                                                                                                                  |
| ----------------------- | -------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `UseNativeGraphRequest` | `switch` | 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 estiver construído em torno do SDK nativo e não do wrapper RealmJoin. |

## Exemplos de utilização

### Vários destinatários

`EmailTo` aceita uma única cadeia de caracteres contendo um ou mais endereços separados por vírgulas. Cada endereço é aparado, as entradas vazias são removidas e **é enviado um e-mail individual por destinatário** — os destinatários não se veem uns aos outros.

```powershell
Send-RjRbReportEmail `
    -EmailFrom "realmjoin-report@contoso.com" `
    -EmailTo   "alice@contoso.com, bob@contoso.com, team-lead@contoso.com" `
    -Subject   "Inventário mensal" `
    -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 "Attached Files" na parte inferior do corpo do e-mail, além de serem adicionados como anexos reais à mensagem.

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

Traga a sua própria identidade visual descarregando primeiro os recursos para um caminho local e depois passando os caminhos resultantes. A função não obtém URLs por si própria.

```powershell
# Resolva os recursos 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 marca" `
    -MarkdownContent  $reportMd `
    -HeaderImage      $headerPath `
    -FooterImage      $footerPath `
    -FooterLink       "https://intranet.contoso.com/it-reports"
```

Se `$headerPath` estiver em falta ou ilegível, a chamada continua a ter sucesso — o padrão incluído do RealmJoin é usado e é registado um aviso.

### Branding personalizado do modelo

Adapte o e-mail 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 marca" `
    -MarkdownContent $reportMd `
    -AccentColor     "#0052cc" `
    -TextColor       "#1a1a2e"
```

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

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

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

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

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

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

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

Para notificações de estilo alerta que não devem parecer um e-mail 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`nVeja o painel para detalhes." `
    -NoHeader `
    -NoFooter
```

### Usando o SDK nativo Microsoft.Graph

Se o runbook já estiver autenticado através de `Connect-MgGraph` (identidade gerida) e preferir não misturar o wrapper 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 marca ao acrescentar `{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 ao dispositivo aguarda a sua decisão.

[Aprovar](https://portal.contoso.com/approve/123){button} [Rejeitar](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 ao dispositivo" `
    -MarkdownContent $reportMd
```

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

## Suporte a Markdown

A função vem com um conversor leve integrado de Markdown → HTML. **Não é necessário nenhum módulo externo de Markdown.** Sintaxe suportada:

| Markdown                                      | Notas                                                                                                                                                                                                                                                                                                                                                             |
| --------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `# … ######` títulos                          | Todos os seis níveis. O espaço após `#` é opcional. `h1` recebe um sublinhado; espaçamento ajustado para o Outlook.                                                                                                                                                                                                                                               |
| `**negrito**`, `*itálico*`, `~~riscado~~`     | Apenas em linha (não pode abranger várias linhas).                                                                                                                                                                                                                                                                                                                |
| `` `inline code` ``                           | Renderizado como `<code>` com um fundo cinza-claro.                                                                                                                                                                                                                                                                                                               |
| blocos de código delimitados com lang ...     | A etiqueta de idioma é preservada como `class="language-…"`. Também tolera cercas malformadas de um único acento grave.                                                                                                                                                                                                                                           |
| `[text](url)` links                           | 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 a marca, em vez de um link simples. Vários `{button}` links na **mesma linha** são renderizados lado a lado em uma única linha (largura dividida igualmente). Cantos arredondados aparecem em clientes modernos (New Outlook, OWA, mobile); o Outlook Classic (motor Word) renderiza cantos quadrados. |
| `![alt](url)` imagens                         | Inserido como `<img>` (sem mágica de anexo embutido — o URL deve estar acessível pelo cliente de e-mail).                                                                                                                                                                                                                                                         |
| `- item` / `1. item` listas                   | Listas aninhadas 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 uma borda esquerda colorida e fundo sombreado.                                                                                                                                                                                                                                                                                                    |
| `> [!NOTE\|TIP\|IMPORTANT\|WARNING\|CAUTION]` | Advertências no estilo GitHub. A primeira linha do bloco de citação é o marcador (sozinho), as restantes `>`linhas prefixadas por - formam o corpo. Cada tipo recebe sua própria cor de destaque, glifo e barra de título.                                                                                                                                        |
| `---`, `***`, `___`                           | Linha horizontal.                                                                                                                                                                                                                                                                                                                                                 |
| `\|col\|col\|` tabelas                        | Tabelas padrão por barras verticais com `:---`, `:---:`, `---:` especificadores de alinhamento. Linha de cabeçalho + separador obrigatórios.                                                                                                                                                                                                                      |
| `\\` escape                                   | `\*`, `\|` etc. são respeitados para que caracteres literais do Markdown possam ser emitidos.                                                                                                                                                                                                                                                                     |

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

## Comportamento e tratamento de erros

### Análise de destinatários

`EmailTo` é separado 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 que qualquer chamada ao Graph seja feita.

### Falhas por destinatário

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

* Se **pelo menos um** envio é bem-sucedido, mas outros falham, é emitido um aviso listando os endereços que falharam; a função retorna normalmente.
* Se **todos** 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 detalhadamente, 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 na substituição de imagens

Ambas `HeaderImage` e `FooterImage` retornam aos padrões incluídos em qualquer erro (arquivo ausente, erro de I/O 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 a partir da **assinatura do arquivo** (bytes mágicos), em vez da extensão do arquivo. Um arquivo chamado `.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 embutido quebrado. Por outro lado, um PNG válido salvo com uma extensão enganosa é aceito e identificado 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 citando o parâmetro, e o envio prossegue com a cor padrão. As cores nunca são motivo para um relatório falhar.

### Limite total de tamanho

Graph limita `sendMail` as requisições a \~4 MB combinados (corpo HTML + todos os anexos, codificados em base64). A função emite um aviso quando qualquer imagem de branding excede 3 MB.

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

* Fornecer um `FallbackAttachments` conjunto (por exemplo, a pasta de trabalho do Excel sem os arquivos CSV brutos).
* Enviar dados grandes para o canal Storage Account em vez disso — veja [Runbook Report Settings](/pt/automatizacao/runbooks/runbook-report-settings.md#storage-account-delivery).
* Vincular anexos hospedados externamente em vez de incorporá-los.
* Compactar dados tabulares (`Compress-Archive`) antes de anexar.

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

Os runbooks de relatório não codificam de forma fixa o endereço do remetente nem a identidade visual: 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 [Runbook Report Settings](/pt/automatizacao/runbooks/runbook-report-settings.md).

A vinculação acontece no `param()` bloco 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 "No EmailSender configured. See https://docs.realmjoin.com/automation/runbooks/runbook-report-settings for setup instructions."
}

# Baixa e valida as imagens de branding uma vez por execução; retorna apenas as chaves
# que foram resolvidas com sucesso, para que as 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 é gravado 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 tarefas do Azure Automation.

## Auxiliares exportados relacionados

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

| Função                                                                                           | Finalidade                                                                                                                                                                                                                                  |
| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [`Get-RjRbBrandingMailParams`](/pt/dev-reference/report-functions/get-rjrbbrandingmailparams.md) | Converte as `RJReport.Branding.*` configurações do Tenant em parâmetros prontos para splatting: baixa e valida as imagens, passa as cores e o link do rodapé adiante.                                                                       |
| `ConvertFrom-RjRbMarkdownToHtml`                                                                 | Conversor independente de Markdown → HTML (o mesmo mecanismo leve usado internamente, incluindo a `{button}` sintaxe). Aceita `-AccentColor`/`-TextColor`.                                                                                  |
| `Get-RjRbReportEmailBody`                                                                        | Monta o corpo HTML completo com a 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 fonte CID embutida. Valida pela assinatura do arquivo e lança erro para qualquer coisa que não seja PNG, JPEG ou GIF.                                                             |

Exceto por `Get-RjRbBrandingMailParams`, estas destinam-se principalmente a cenários avançados/de teste; o caminho normal é chamar `Send-RjRbReportEmail` diretamente.

## Ver também

* [Get-RjRbBrandingMailParams](/pt/dev-reference/report-functions/get-rjrbbrandingmailparams.md) — resolvendo as configurações de branding do tenant dentro de um runbook.
* [Runbook Report Settings](/pt/automatizacao/runbooks/runbook-report-settings.md) — configuração central da caixa de correio do remetente, informações do service desk, branding e canal de entrega 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.
