> 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 a marca a partir de runbooks do Azure Automation via Microsoft Graph usando conteúdo Markdown.

## Visão geral

`Send-RjRbReportEmail` é o auxiliar padrão para enviar emails de relatório a partir de runbooks de relatório do RealmJoin. Ele recebe conteúdo Markdown, converte-o em um email HTML responsivo com a marca RealmJoin, anexa arquivos opcionais e gráficos de marca embutidos (cabeçalho/rodapé) e envia o resultado por meio do Microsoft Graph `sendMail` ponto de extremidade.

> **Renomeada 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, para que os runbooks existentes continuem funcionando 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, Novo Outlook, Outlook Web, clientes móveis e 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/BCC por padrão.
* **Cabeçalho e rodapé com marca incorporada** — ativos PNG incluídos são enviados como anexos CID e referenciados pelo HTML incorporado. Ambos podem ser substituídos ou suprimidos totalmente.
* **Cores de modelo personalizáveis** — a cor de destaque e a cor do texto do modelo podem ser substituídas por 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 menor de anexos de fallback é enviado automaticamente quando o conjunto normal excede o orçamento de tamanho ou quando a 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` é 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 interrompem 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 do Relatório do Runbook](/pt/automatizacao/runbooks/runbook-report-settings.md) — este documento se concentra 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 de correio partilhada dedicada, como `realmjoin-report@contoso.com`) como endereço `From` A identidade gerenciada da Automation Account deve ter permissão para enviar em nome dessa caixa de correio por meio da permissão de aplicativo do Microsoft Graph `Mail.Send` (limitada via RBAC for Applications se você quiser restringir a identidade a uma única caixa de correio).

> **O remetente não deve ser um grupo do Microsoft 365.** A função envia por meio do ponto de extremidade do Graph `/users/{EmailFrom}/sendMail` — um grupo do Microsoft 365 não é um objeto de usuário, então a chamada falha. Use um usuário ou uma caixa de correio compartilhada.
>
> Endereços de grupo do Microsoft 365 como **destinatários** são tecnicamente aceitos, mas **não são recomendados**: a mensagem pode chegar apenas à caixa de correio do grupo (os membros recebem uma cópia pessoal somente se seguirem o grupo), o gerenciamento 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 runbook em si ainda relata 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` (Aplicação) na caixa de correio do remetente |
| Com `-UseNativeGraphRequest`          | O mesmo — a chamada ainda atinge `/users/{id}/sendMail`  |

### Conectividade do módulo

Por padrão, a função usa `Invoke-RjRbRestMethodGraph` deste módulo. Se nenhuma conexão estiver ativa, ela se conecta automaticamente por meio de `Connect-RjRbGraph`. Quando `-UseNativeGraphRequest` é definido, a função, em vez disso, verifica `Get-MgContext` e chama `Connect-MgGraph -Identity -NoWelcome` sob demanda.

## 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%**
"@
```

Isso produz um email RealmJoin totalmente com marca, com o cabeçalho e rodapé padrão, suporte a 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 usuário ou ID de objeto da caixa de correio do remetente. Usado como `/users/{id}/sendMail`. Deve ser uma caixa de correio de usuário ou compartilhada — um grupo do Microsoft 365 não é um objeto de usuário e o envio falha.                                               |
| `EmailTo`         | `string` | Endereço do destinatário. **Uma única string** — vários endereços são passados como uma lista separada por vírgulas, veja abaixo. Endereços de grupo do Microsoft 365 são aceitos, mas não recomendados — a entrega aos membros não é garantida e as falhas não ficam visíveis para o runbook. |
| `Assunto`         | `string` | Linha de assunto. Também inserida 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 locais de arquivos para anexar. Arquivos ausentes são registrados e ignorados, arquivos ilegíveis emitem um aviso, mas não interrompem o envio. O tipo MIME é derivado da extensão do arquivo. |
| `saveToSentItems`   | `bool`     | `$true` | Se `$true` a mensagem enviada é mantida na caixa de correio do remetente em *Itens enviados*. Defina como `$false` para relatórios de alto volume, para evitar encher a caixa de correio.               |
| `TenantDisplayName` | `string`   | —       | Exibido na caixa de informações do tenant incorporada no final da área de conteúdo.                                                                                                                     |
| `ReportVersion`     | `string`   | —       | Exibido na caixa de informações do tenant (use strings de versão semântica, números de build ou um nome de runbook + data).                                                                             |

### Opcional — Marca

| Parâmetro             | Tipo         | Padrão                        | Descrição                                                                                                                                                                                                                                                                                                  |
| --------------------- | ------------ | ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Imagem do cabeçalho` | `string`     | incluídos `Assets/Header.png` | Caminho local de arquivo para um PNG/JPG/GIF que substitui a imagem padrão do cabeçalho. **O runbook deve resolver qualquer URL/blob para um arquivo local antecipadamente** (por exemplo, via `Get-AzStorageBlobContent`). Substituições ausentes/inlegíveis voltam ao padrão incluído e emitem um aviso. |
| `Imagem do rodapé`    | `string`     | incluídos `Assets/Footer.png` | Mesmo tratamento que `Imagem do cabeçalho`. O rodapé é renderizado como uma única imagem clicável — qualquer texto de marca, logotipo ou URL deve estar incorporado no PNG.                                                                                                                                |
| `Link do rodapé`      | `string`     | `https://www.realmjoin.com`   | URL usada como `href` e `title` da âncora que envolve a imagem do rodapé.                                                                                                                                                                                                                                  |
| `Sem cabeçalho`       | `alternador` | desativado                    | Suprime totalmente a imagem do cabeçalho. Se combinado com `Imagem do cabeçalho`HeaderImage                                                                                                                                                                                                                |
| `Sem rodapé`          | `alternador` | desativado                    | Suprime totalmente a imagem do rodapé e seu link. Se combinado com `Imagem do rodapé` ou um `Link do rodapé`FooterLink                                                                                                                                                                                     |
| `Cor de destaque`     | `string`     | `#f8842c`                     | *Novo na 0.8.9.* Cor hex de 6 dígitos para linhas de cabeçalho da tabela, botões de ação e as bordas de destaque das caixas de informações. Um valor vazio ou malformado emite um aviso e volta ao padrão.                                                                                                 |
| `Cor do texto`        | `string`     | `#011e33`                     | *Novo na 0.8.9.* Cor hex de 6 dígitos para texto do corpo, títulos, itens de lista e código. Mesmo comportamento de fallback que `Cor de destaque`.                                                                                                                                                        |

**Dimensões de imagem recomendadas:** PNG de 750 × 200 px. Isso corresponde à largura do contêiner do email e aos padrões incluídos. Proporções significativamente diferentes podem parecer distorcidas em larguras estreitas. Cada imagem deve ficar bem abaixo de 3 MB — o Graph limita a requisição total em 4 MB e um aviso é emitido se qualquer imagem exceder 3 MB. `sendMail` requisição em 4 MB e um aviso é emitido se qualquer imagem exceder 3 MB.

**Cores:** sem `Cor de destaque`/`Cor do texto` 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 status (verde/vermelho/âmbar) e os cinzas neutros não são parametrizados intencionalmente porque transmitem significado. Verifique as cores personalizadas tanto no modo claro quanto no escuro: o cartão de conteúdo permanece branco no modo escuro, então uma cor de texto muito clara fica ilegível.

### Opcional — Proteção de tamanho de anexos

*Novo na 0.8.9.* O Graph rejeita toda a `sendMail` requisição assim que a mensagem excede \~4 MB. Em vez de fazer o relatório falhar, a função pode recorrer a um conjunto menor de anexos. Essa lógica antes era duplicada como o auxiliar embutido do runbook `Send-RjRbGuardedReportEmail` e agora faz parte da própria função.

| Parâmetro                 | Tipo       | Padrão                     | Descrição                                                                                                                                                                                                                                                          |
| ------------------------- | ---------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `FallbackAttachments`     | `string[]` | —                          | Conjunto menor de anexos usado quando o conjunto normal excede `MaxAttachmentBytes`ou quando o envio com o conjunto normal falha para todos os destinatários. Sem esse parâmetro não há fallback e um envio com falha gera erro imediatamente.                     |
| `FallbackMarkdownContent` | `string`   | valor de `MarkdownContent` | Corpo usado quando o conjunto de fallback é enviado — use-o para explicar quais arquivos foram omitidos e como obtê-los.                                                                                                                                           |
| `MaxAttachmentBytes`      | `longo`    | `2.5MB`                    | Orçamento de tamanho bruto para o conjunto normal de anexos. Permanece com folga abaixo do limite de \~4 MB do Graph após a codificação em base64 (+33 %), o corpo HTML e as imagens de marca embutidas. Avaliado apenas quando `FallbackAttachments` é fornecido. |

A proteção é executada em duas etapas:

1. **Antes do envio** — se o conjunto normal exceder o orçamento, o conjunto de fallback é enviado diretamente e uma mensagem informa os dois tamanhos.
2. **Após um envio com falha** — se o envio com o conjunto normal falhar para *todos os* destinatários, uma nova tentativa com o conjunto de fallback é feita antes de a função gerar erro.

### Opcional — Transporte

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

## Exemplos de uso

### Múltiplos destinatários

`EmailTo` aceita uma única string contendo um ou mais endereços separados por vírgulas. Cada endereço é aparado, entradas vazias são removidas e **um email individual é enviado 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 arquivos anexados são listados em uma caixa "Arquivos anexados" no final do corpo do email, além de serem adicionados como anexos reais à mensagem.

### Marca personalizada de cabeçalho/rodapé

Traga sua própria marca baixando os ativos para um caminho local primeiro e depois passe os caminhos resultantes. A função não busca URLs por conta própria.

```powershell
# Resolva os ativos de marca 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 ausente ou ilegível, a chamada ainda será bem-sucedida — o padrão incluído do RealmJoin é usado e um aviso é registrado.

### Cores personalizadas do modelo

Ajuste o email ao design corporativo de um cliente. Ambos os parâmetros são independentes — substituir apenas a cor de destaque mantém a cor padrão do texto:

```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 `azul` ou `#05c`) não faz o envio falhar: um aviso identifica o parâmetro e a cor padrão é usada.

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

Gere um CSV e uma pasta de trabalho do Excel, mas faça fallback para apenas a pasta de trabalho 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. A pasta de trabalho 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 embutido `Send-RjRbGuardedReportEmail` podem remover 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 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ça excedido" `
    -MarkdownContent "## Limite de licença excedido`n`nVeja o painel para detalhes." `
    -NoHeader `
    -NoFooter
```

### Usando o SDK nativo do Microsoft.Graph

Se o runbook já estiver autenticado por meio de `Connect-MgGraph` (identidade gerenciada) e você 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
```

### Lendo o corpo do relatório de um arquivo

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

```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 adicionando `{button}` a um link Markdown. Botões colocados na mesma linha são agrupados em uma única linha:

```powershell
$reportMd = @"
# Solicitação de acesso

Uma nova solicitação de acesso a dispositivo aguarda 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: solicitação de acesso a dispositivo" `
    -MarkdownContent $reportMd
```

Cada botão é um hiperlink normal estilizado como CTA — seguro em todos os clientes, com cantos arredondados em clientes modernos e cantos quadrados no Outlook Classic.

## Suporte a Markdown

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

| Markdown                                      | Notas                                                                                                                                                                                                                                                                                                                                                             |
| --------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `# … ######` títulos                          | Todos os seis níveis. Espaço depois `#` é opcional. `h1` recebe um sublinhado; o espaçamento é ajustado para o Outlook.                                                                                                                                                                                                                                           |
| `**negrito**`, `*itálico*`, `~~riscado~~`     | Apenas inline (não deve abranger várias linhas).                                                                                                                                                                                                                                                                                                                  |
| `` `código inline` ``                         | Renderizado como `<code>` com um fundo cinza claro.                                                                                                                                                                                                                                                                                                               |
| blocos de código delimitados por lang ...     | A tag de idioma é preservada como `class="language-…"`. Também tolera fences malformados de crase simples.                                                                                                                                                                                                                                                        |
| `[text](url)` links                           | Abrir numa 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 numa única linha (largura dividida igualmente). Cantos arredondados aparecem em clientes modernos (Novo Outlook, OWA, mobile); o Outlook Clássico (motor Word) renderiza cantos quadrados. |
| `![alt](url)` imagens                         | Inseridas como `<img>` (sem magia de anexo inline — a URL precisa ser acessível pelo cliente de e-mail).                                                                                                                                                                                                                                                          |
| `- item` / `1. item` listas                   | Listas aninhadas suportadas por indentação de 2 espaços por nível. Misturar listas ordenadas e não ordenadas fecha a lista anterior.                                                                                                                                                                                                                              |
| Itens de lista em várias linhas               | Uma linha recuada e não vazia logo abaixo de um `<li>` é incorporada no mesmo item com uma `<br>` quebra suave — não é necessário manter cada item numa única linha.                                                                                                                                                                                              |
| `- [ ]` / `- [x]` listas de tarefas           | Renderizado como `☐` / `☑` glifos Unicode (em verde quando marcado). `<input type="checkbox">` é intencionalmente evitado porque o Outlook Clássico remove controlos de formulário. Maiúscula `[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 ao estilo GitHub. A primeira linha da citação em bloco é o marcador (sozinho), as restantes `>`linhas prefixadas por - formam o corpo. Cada tipo recebe a 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 obrigatórios.                                                                                                                                                                                                                      |
| `\\` escape                                   | `\*`, `\|` etc. são respeitados para que caracteres Markdown literais possam ser emitidos.                                                                                                                                                                                                                                                                        |

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

## Comportamento e tratamento de erros

### Análise de destinatários

`EmailTo` é separado por vírgulas, cada entrada é aparada e as entradas vazias são descartadas. Se a lista resultante estiver vazia, a função lança `Não foram encontrados destinatários de e-mail válidos no parâmetro EmailTo.` antes de qualquer chamada ao Graph ser feita.

### Falhas por destinatário

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

* Se **pelo menos um** envio seja bem-sucedido, mas outros falhem, é 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 anexos

* Ficheiros em falta (o caminho não existe) — registados detalhadamente, ignorados silenciosamente.
* Ficheiros existentes mas ilegíveis (bloqueados, permissão negada) — aviso emitido, ignorados, o resto da chamada prossegue.
* A caixa "Attached Files" no final do e-mail lista apenas os anexos que foram lidos com sucesso.

### Falhas na substituição de imagens

Ambos `Imagem do cabeçalho` e `Imagem do rodapé` fazem fallback para os padrões incluídos em caso de qualquer erro (ficheiro em falta, erro de E/S ou um ficheiro 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 ficheiro** (magic bytes) em vez da extensão do ficheiro. Um ficheiro com o nome `.png` mas que na realidade contém uma página de erro HTML — um resultado comum quando um download devolve silenciosamente um documento de erro — é agora rejeitado com um aviso em vez de produzir um anexo inline quebrado. Inversamente, um PNG válido guardado sob uma extensão enganadora é aceite e tipado corretamente.

### Cores inválidas

`Cor de destaque` e `Cor do texto` são validadas contra `^#[0-9A-Fa-f]{6}$`. Um valor que não corresponda emite um aviso nomeando o parâmetro e o envio prossegue com a cor predefinida. As cores nunca são motivo para um relatório falhar.

### Limite total de tamanho

O Graph limita `sendMail` os pedidos a \~4 MB combinados (corpo HTML + todos os anexos, codificados em base64). A função emite um aviso quando qualquer uma das imagens de branding excede 3 MB.

Quando `FallbackAttachments` é fornecido, a proteção de tamanho do anexo descrita na secção de parâmetros acima trata automaticamente cargas úteis demasiado grandes. Sem um conjunto de fallback, um pedido demasiado grande falha na chamada ao Graph; considere:

* Fornecer um `FallbackAttachments` conjunto (por exemplo, o livro do Excel sem os ficheiros CSV brutos).
* Carregar dados grandes para o canal Storage Account em vez disso — veja [Configurações do Relatório do Runbook](/pt/automatizacao/runbooks/runbook-report-settings.md#storage-account-delivery).
* Criar ligação para anexos alojados externamente em vez de os incorporar.
* Comprimir dados tabulares (`Compress-Archive`) antes de anexar.

## Integração com as definições do Runbook Report

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

A associação acontece no `param()` bloco através de `Use-RJInterface -Type Setting`, e os parâmetros são marcados `"Hide": true` no `.INPUTS RunbookCustomization` bloco para que não poluam o formulário do portal:

```powershell
param(
    [ValidateScript( { Use-RJInterface -Type Setting -Attribute "RJReport.EmailSender" } )]
    [string]$EmailFrom,

    [ValidateScript( { Use-RJInterface -Type Setting -Attribute "RJReport.Branding.HeaderImageUrl" } )]
    [string]$BrandingHeaderImageUrl,

    [ValidateScript( { Use-RJInterface -Type Setting -Attribute "RJReport.Branding.FooterImageUrl" } )]
    [string]$BrandingFooterImageUrl,

    [ValidateScript( { Use-RJInterface -Type Setting -Attribute "RJReport.Branding.FooterLink" } )]
    [string]$BrandingFooterLink,

    [ValidateScript( { Use-RJInterface -Type Setting -Attribute "RJReport.Branding.AccentColor" } )]
    [string]$BrandingAccentColor,

    [ValidateScript( { Use-RJInterface -Type Setting -Attribute "RJReport.Branding.TextColor" } )]
    [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."
}

# Descarrega e valida as imagens de branding uma vez por execução; devolve apenas as chaves
# que foram resolvidas com sucesso, para que as definições não configuradas caiam para os 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 descarregamento, validação e limpeza.

## Saídas

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

## Auxiliares 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                                                                                           | Finalidade                                                                                                                                                                                                                                    |
| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [`Get-RjRbBrandingMailParams`](/pt/dev-reference/report-functions/get-rjrbbrandingmailparams.md) | Converte as `RJReport.Branding.*` definições do tenant em parâmetros prontos a aplicar: descarrega e valida as imagens, passa as cores e o link do rodapé.                                                                                    |
| `ConvertFrom-RjRbMarkdownToHtml`                                                                 | Conversor Markdown → HTML autónomo (o mesmo motor leve usado internamente, incluindo a `{button}` sintaxe). Aceita `-AccentColor`/`-TextColor`.                                                                                               |
| `Get-RjRbReportEmailBody`                                                                        | Compõe o corpo HTML completo com branding (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 a sua fonte CID inline. Valida pela assinatura do ficheiro e lança erro para qualquer coisa que não seja PNG, JPEG ou GIF.                                                              |

Exceto por `Get-RjRbBrandingMailParams`, estes 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) — resolução das definições de branding do tenant dentro de um runbook.
* [Configurações do Relatório do Runbook](/pt/automatizacao/runbooks/runbook-report-settings.md) — configuração central da caixa de correio do remetente, informação 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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.realmjoin.com/pt/dev-reference/report-functions/send-rjrbreportemail.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
