ℹ Actualização importante — Setembro 2025

A Microsoft deprecou os cmdlets Get-MessageTrace e Get-MessageTraceDetail a partir de Setembro de 2025. Este artigo cobre exclusivamente a nova interface do Message Trace no EAC e os novos cmdlets Get-MessageTraceV2 / Get-MessageTraceDetailV2 (requer módulo ExchangeOnlineManagement ≥ 3.7.0). Se ainda uses os cmdlets antigos nos teus scripts, migra antes de April de 2026.

O Message Trace é a ferramenta número um de diagnóstico de fluxo de email no Exchange Online. Permite seguir o percurso exacto de qualquer mensagem — do remetente ao destinatário — através de todos os filtros, regras de transporte e serviços de protecção. É o primeiro passo em qualquer ticket de email não entregue, e frequentemente o único passo necessário.

Com a nova interface GA (disponível desde Julho de 2025), o Message Trace suporta agora até 90 dias de histórico de dados (em janelas de 10 dias por pesquisa) e inclui melhorias significativas de performance e filtros. Este artigo cobre a interface web e os novos cmdlets PowerShell em detalhe.

1. Aceder ao Message Trace — interface web

Existem dois caminhos para aceder ao Message Trace:

Via menu EAC admin.exchange.microsoft.com → Mail flow → Message trace
URL directo admin.exchange.microsoft.com/#/messagetrace

Permissões necessárias: A função mínima para usar o Message Trace é View-Only Recipients ou qualquer função que inclua permissões de leitura de mail flow. Administradores globais e Exchange Administrators têm acesso completo por defeito.

A página do Message Trace tem três separadores principais:

Separador Função
Default queries Pesquisas pré-definidas pela Microsoft — úteis como ponto de partida rápido para cenários comuns
Custom queries Pesquisas guardadas pelo administrador — permite guardar e reutilizar filtros frequentes
Downloadable reports Resultados de pesquisas históricas (dados > 10 dias) para download em CSV

2. Pesquisa básica — os campos essenciais

Ao clicar em Start a trace, abre um painel lateral com os campos de pesquisa. Para a maioria dos tickets de helpdesk, preencher apenas três campos é suficiente:

Campo O que preencher Dicas
Senders Endereço(s) do remetente — ex: [email protected] Aceita múltiplos endereços separados por vírgula. Deixar em branco para todos os remetentes
Recipients Endereço(s) do destinatário Múltiplos endereços possíveis. Para grupos de distribuição: pesquisar pelo endereço do grupo
Time range Intervalo de tempo da pesquisa Os horários são em UTC. Se o utilizador disse “às 10h” (hora PT/WET), pesquisa às 09:00–11:00 UTC no Inverno ou 08:00–10:00 UTC no Verão
Report type Summary (padrão) ou Extended Summary é mais rápido e suficiente para a maioria dos casos. Extended inclui mais campos e eventos mas demora mais

⚠ Atenção ao fuso horário — o erro mais comum

Todos os horários no Message Trace são em UTC (Coordinated Universal Time). Portugal Continental (WET/WEST) está em UTC+0 no Inverno e UTC+1 no Verão. Se um utilizador diz que enviou um email às 14:30 e não pesquisas o intervalo correcto em UTC, não encontras o email. Converte sempre os horários antes de pesquisar.

3. Filtros avançados e pesquisas guardadas

Para troubleshooting mais específico, o painel de pesquisa tem campos adicionais que permitem filtrar com mais precisão:

Filtro Valores possíveis Quando usar
Delivery status All, Delivered, Failed, Pending, FilteredAsSpam, Quarantined, Expanded Filtrar apenas por mensagens que falharam ou foram para quarentena
Message ID O valor do header Message-ID do email Rastrear uma mensagem específica com o ID fornecido pelo remetente
Direction All, Inbound, Outbound Filtrar apenas email a entrar (de externos) ou a sair (para externos)
Original client IP Endereço IP de origem Identificar email de um IP específico — útil para relay de sistemas e multifunções
Network Message ID GUID gerado pelo Exchange Online para cada mensagem Rastrear com precisão absoluta — obtido a partir de um resultado de pesquisa anterior

Guardar pesquisas frequentes

Após configurar um conjunto de filtros úteis (ex: pesquisa de emails falhados nas últimas 48h), é possível guardar a pesquisa para reutilização futura:

  1. Configurar os filtros pretendidos no painel de pesquisa
  2. Clicar em Save this query antes de executar a pesquisa
  3. Dar um nome descritivo — ex: “Emails falhados últimas 48h”
  4. A pesquisa fica disponível no separador Custom queries para todos os administradores do tenant

4. Interpretar os resultados — statuses e eventos

A lista de resultados mostra uma linha por mensagem com as colunas: Date, Sender, Recipients, Subject, Status e Size. O campo Status é o mais importante:

Status Significado Próxima acção
Delivered Email entregue com sucesso na caixa de correio do destinatário Verificar pasta Lixo, regras de inbox, pasta de Arquivo — o email chegou
Failed Entrega falhou definitivamente — gerado NDR para o remetente Abrir o detalhe da mensagem → identificar o código de erro NDR
Pending Email ainda em fila de espera — entrega adiada (pode ainda ser entregue) Aguardar; verificar se o servidor de destino tem problemas; verificar MX do destinatário
FilteredAsSpam Marcado como spam pelo Exchange Online Protection — entregue mas na pasta Lixo Verificar pasta Lixo do destinatário; se legítimo, ajustar política anti-spam ou adicionar remetente aos Safe Senders
Quarantined Retido na quarentena por política anti-spam, anti-malware ou regra de transporte EAC → Email & collaboration → Review → Quarantine → avaliar e libertar ou eliminar
Expanded Mensagem expandida para múltiplos destinatários (grupo de distribuição) Pesquisar por cada destinatário individualmente para verificar estado de entrega a cada um
GettingStatus Status ainda a ser calculado — pode demorar 5–10 minutos após envio Aguardar e repetir a pesquisa após 10 minutos

ℹ Latência dos resultados: Pode existir um atraso de 5 a 10 minutos entre o estado real de entrega e o estado reportado no Message Trace. Para emails muito recentes (últimos 15 minutos), o status pode ainda estar a actualizar.

5. Detalhe de mensagem — ler a cadeia de eventos

Ao clicar numa mensagem nos resultados, abre o painel de detalhe com a cadeia completa de eventos que a mensagem atravessou. Esta cadeia é o elemento mais valioso para diagnóstico aprofundado — permite ver exactamente em que ponto o email foi retido, transformado ou rejeitado.

Campos de cabeçalho do detalhe

Campo O que mostra
Message ID ID da mensagem do header de email — útil para correlacionar com logs do remetente
Network Message ID GUID interno do Exchange Online — usar este ID para pesquisas PowerShell precisas
From IP / To IP IP de origem e destino — útil para identificar relay de terceiros ou dispositivos
Size Tamanho da mensagem em bytes — se muito grande pode explicar rejeição por limite de tamanho

Eventos mais comuns na cadeia de eventos

Evento Significado
RECEIVE O Exchange Online recebeu a mensagem do remetente — ponto de entrada no serviço
DELIVER Mensagem entregue na caixa de correio do destinatário — entrega bem-sucedida
AGENTINFO Uma regra de transporte ou agente processou a mensagem — ler o detalhe para ver qual regra
FAIL Entrega falhou — o detalhe do evento contém o código de erro NDR
SPAM EOP (Exchange Online Protection) classificou a mensagem como spam
QUARANTINE Mensagem retida na quarentena — ver motivo no detalhe
SEND Exchange Online enviou a mensagem para o servidor de destino externo
EXPAND Mensagem expandida para múltiplos destinatários (grupo de distribuição processado)

6. Pesquisa histórica — dados com mais de 10 dias

A pesquisa em tempo real (near-real-time) cobre os últimos 10 dias. Para dados mais antigos — até 90 dias — é necessário usar o relatório histórico, que é processado de forma assíncrona e entregue em CSV.

Tipo Intervalo máximo Resultado Limite por tenant
Near-real-time (EAC) Últimos 10 dias Imediato — max. 1 000 resultados Sem limite relevante
Historical search Até 90 dias (10 dias por query) CSV disponível em horas (separador Downloadable reports) 250 pesquisas por 24 horas por tenant

Iniciar pesquisa histórica via PowerShell

# Iniciar pesquisa histórica (para dados > 10 dias)
Start-HistoricalSearch -ReportTitle "Email Falhado - Janeiro 2026" `
    -StartDate "01/01/2026" `
    -EndDate "10/01/2026" `
    -ReportType MessageTrace `
    -SenderAddress "[email protected]" `
    -RecipientAddress "[email protected]" `
    -NotifyAddress "[email protected]"

# Verificar estado das pesquisas históricas activas
Get-HistoricalSearch | Select-Object JobId, ReportTitle, Status, StartDate, EndDate, SubmitDate

7. PowerShell — Get-MessageTraceV2 e Get-MessageTraceDetailV2

⚠ Versão do módulo obrigatória: Os novos cmdlets Get-MessageTraceV2 e Get-MessageTraceDetailV2 requerem ExchangeOnlineManagement ≥ 3.7.0. Para actualizar: Update-Module ExchangeOnlineManagement

Pesquisas básicas com Get-MessageTraceV2

Connect-ExchangeOnline -UserPrincipalName [email protected]

# Pesquisa básica: últimas 48h para um utilizador
Get-MessageTraceV2 -RecipientAddress "[email protected]" `
    -StartDate (Get-Date).AddDays(-2) -EndDate (Get-Date) |
    Select-Object Received, SenderAddress, RecipientAddress, Subject, Status |
    Format-Table -AutoSize

# Apenas mensagens com falha nas últimas 24h (todos os utilizadores)
Get-MessageTraceV2 -StartDate (Get-Date).AddDays(-1) -EndDate (Get-Date) -Status Failed |
    Select-Object Received, SenderAddress, RecipientAddress, Subject |
    Format-Table -AutoSize

# Mensagens para a quarentena nas últimas 48h
Get-MessageTraceV2 -StartDate (Get-Date).AddDays(-2) -EndDate (Get-Date) -Status Quarantined |
    Select-Object Received, SenderAddress, RecipientAddress, Subject |
    Sort-Object Received -Descending

Obter detalhe de uma mensagem específica

# Passo 1: Obter o MessageTraceId (Network Message ID) da mensagem
$trace = Get-MessageTraceV2 -SenderAddress "[email protected]" `
    -RecipientAddress "[email protected]" `
    -StartDate (Get-Date).AddHours(-4) `
    -EndDate (Get-Date)

# Ver os resultados
$trace | Select-Object Received, Subject, Status, MessageTraceId

# Passo 2: Obter o detalhe completo da mensagem (cadeia de eventos)
Get-MessageTraceDetailV2 -MessageTraceId $trace[0].MessageTraceId `
    -RecipientAddress "[email protected]" `
    -StartDate (Get-Date).AddHours(-4) `
    -EndDate (Get-Date) |
    Select-Object Date, Event, Action, Detail |
    Format-Table -AutoSize

Exportar resultados para CSV

# Exportar todos os emails falhados da última semana para CSV
Get-MessageTraceV2 -StartDate (Get-Date).AddDays(-7) -EndDate (Get-Date) -Status Failed |
    Select-Object Received, SenderAddress, RecipientAddress, Subject, Status, MessageTraceId |
    Export-Csv "C:\temp\emails_falhados_$(Get-Date -Format 'yyyyMMdd').csv" -NoTypeInformation -Encoding UTF8

Write-Host "Exportado para emails_falhados_$(Get-Date -Format 'yyyyMMdd').csv"

8. Casos práticos — exemplos reais de troubleshooting

Caso A — “Não recebi o email que o cliente disse que enviou”

  1. Message Trace: Senders = endereço do cliente, Recipients = caixa de correio do utilizador, Time range = período reportado (+/- 2h, convertido para UTC
  2. Se Delivered: verificar pasta Lixo, regras de inbox, arquivo automático do Outlook
  3. Se FilteredAsSpam: verificar pasta Lixo → se email legítimo, adicionar domínio do cliente aos Safe Senders na política anti-spam
  4. Se Quarantined: ir à quarentena e libertar o email se legítimo
  5. Se não aparece nada: o cliente pode não ter enviado — pedir header do email para confirmar que passou pelo Exchange Online

Caso B — “O multifunções está a dar erro ao enviar email”

  1. Message Trace: Senders = endereço configurado no multifunções, Time range = hora da tentativa
  2. Se status Failed com código 5.7.57: o dispositivo não está autenticado — configurar SMTP relay via conector no EAC com IP autorizado
  3. Se não aparece nada: o email nem chegou ao Exchange Online — verificar configuração SMTP no dispositivo (servidor, porta, TLS)
  4. Verificar no EAC → Mail flow → Connectors se existe conector para o IP do multifunções

Caso C — “Emails para um domínio externo estão a falhar”

  1. Message Trace: Senders = qualquer utilizador interno, Recipients = *@dominiodestino.com, Status = Failed
  2. Abrir o detalhe da mensagem → identificar o código de erro e o IP de destino
  3. Verificar o MX do domínio de destino com MXToolbox — está a resolver? O servidor de destino está online?
  4. Se o erro inclui “550 5.7.1” ou similar: o servidor de destino está a rejeitar o email — pode ser reputação do IP ou problema SPF do remetente
  5. Verificar se o IP do Exchange Online está em blacklist: usar MXToolbox Blacklist Check com os IPs de saída do tenant

9. Limitações e quando usar alternativas

Limitação Alternativa
Dados de apenas 90 dias no máximo Para dados mais antigos: eDiscovery / Content Search no Purview (pesquisa nas caixas de correio, não no log de transporte)
Máximo 1 000 resultados por pesquisa near-real-time Usar filtros mais específicos ou Historical Search para obter o CSV completo
Mensagens com > 1 000 destinatários — resultados incompletos Incluir o Network Message ID na pesquisa para obter resultados completos
Throttling: 100 queries por 5 minutos (PowerShell V2) Espaçar as queries em scripts de monitorização; usar Historical Search para volumes grandes
Não mostra o conteúdo do email (body, anexos) Para ver conteúdo: eDiscovery no Microsoft Purview (requer permissões adicionais)

Este artigo foi útil?

Duarte Spínola

Deixe um Comentário