📁 Microsoft 365 / Exchange · ⏱ Leitura: ~20 min · 👤 Nível: Administrador de Sistemas · 🗓 Abril 2026
Falhas de entrega de email no Exchange Online podem ter origens muito distintas — desde registos DNS incorretos e políticas de autenticação de email (SPF, DKIM, DMARC), até regras de transporte, conectores mal configurados, quarentena anti-spam ou limitações de envio do tenant. Este guia cobre o diagnóstico completo e sistemático, do sintoma à causa raiz, com os comandos PowerShell e ferramentas de administração necessários.
📋 Índice
- Identificar o Cenário de Falha
- Message Trace — Rastrear o Email Passo a Passo
- Interpretar Códigos de Erro NDR
- SPF, DKIM e DMARC — Diagnóstico de Autenticação
- Quarentena e Anti-Spam
- Conectores e Fluxo de Correio
- Regras de Transporte (Mail Flow Rules)
- Limites de Envio do Exchange Online
- Checklist de Diagnóstico Rápido
1. Identificar o Cenário de Falha
O primeiro passo é classificar o tipo de falha — isso determina onde começar o diagnóstico.
| Sintoma | Causa mais provável | Ir para |
|---|---|---|
| Recebeu NDR (bounce) com código de erro | Rejeição SMTP — destinatário, quota, bloqueio | Secção 3 |
| Email enviado mas não chegou — sem NDR | Quarentena, regra de transporte, filtro anti-spam | Secção 2 |
| Email externo vai para Lixo/Junk | SPF/DKIM/DMARC do remetente, reputação de IP | Secção 4 |
| Emails do domínio vão para Junk no destino | SPF/DKIM/DMARC do nosso domínio incorretos | Secção 4 |
| Email bloqueado por sistema externo (aplicação, impressora) | Conector SMTP mal configurado ou IP não autorizado | Secção 6 |
| Email redirecionado, modificado ou apagado | Regra de transporte ativa no tenant | Secção 7 |
| Erro 550 5.7.x — quota ou limite excedido | Limite de envio diário ou por minuto atingido | Secção 8 |
2. Message Trace — Rastrear o Email Passo a Passo
O Message Trace é a ferramenta central de diagnóstico do Exchange Online — regista cada passo de entrega de qualquer mensagem, incluindo o motivo exato de falha. É o primeiro passo para qualquer problema de email não explicado.
2.1 — Via Centro de Administração Microsoft 365
- Aceder ao Centro de Administração do Exchange
- Navegar para Fluxo de correio → Rastreamento de mensagens
- Preencher: remetente, destinatário, intervalo de datas (máximo 90 dias para pesquisa histórica)
- Clicar em Pesquisar
- Clicar na mensagem → “Ver detalhes da mensagem” para ver cada hop de entrega
💡 Resultados do Message Trace — estados a identificar:
GettingStatus — mensagem ainda em processamento
Delivered — entregue na caixa de correio do destinatário
Failed — falha permanente (ver código de erro nos detalhes)
FilteredAsSpam — bloqueada como spam pelo EOP
Quarantined — em quarentena (ver Secção 5)
Expanded — enviada para lista de distribuição
Redirected — redirecionada por regra de transporte
2.2 — Via PowerShell (Exchange Online)
PowerShell — Exchange Online
# Ligar ao Exchange Online (se ainda não ligado)
Connect-ExchangeOnline -UserPrincipalName [email protected]
# Rastrear emails das últimas 48 horas entre dois endereços
Get-MessageTrace -SenderAddress [email protected] -RecipientAddress [email protected] -StartDate (Get-Date).AddDays(-2) -EndDate (Get-Date)
# Ver detalhes de uma mensagem específica (usar MessageId dos resultados)
Get-MessageTraceDetail -MessageId “<ID_DA_MENSAGEM>” -RecipientAddress [email protected]
PowerShell — Pesquisa histórica (até 90 dias)
# Para mensagens com mais de 10 dias usar Start-HistoricalSearch
Start-HistoricalSearch -ReportTitle “Falha Email Jan” -StartDate 01/01/2026 -EndDate 31/01/2026 -ReportType MessageTrace -SenderAddress [email protected] -NotifyAddress [email protected]
# Ver estado da pesquisa histórica
Get-HistoricalSearch | Select ReportTitle, Status, SubmitDate
3. Interpretar Códigos de Erro NDR
Uma NDR (Non-Delivery Report) contém um código de estado SMTP no formato 5.X.X (falha permanente) ou 4.X.X (falha temporária). Os códigos mais frequentes no Exchange Online:
| Código NDR | Significado | Ação |
|---|---|---|
| 550 5.1.1 | Destinatário não existe (endereço de email inválido) | Confirmar endereço; verificar se caixa foi eliminada ou renomeada |
| 550 5.1.10 | Domínio do destinatário não existe ou não aceita email | Verificar registo MX do domínio de destino |
| 550 5.2.2 | Caixa de correio do destinatário com quota excedida | Aumentar quota ou limpar caixa de correio no destino |
| 550 5.4.1 | Relay não permitido — domínio de envio não autorizado | Verificar configuração do conector de envio |
| 550 5.7.1 | Mensagem rejeitada por política — SPF, DKIM ou regra | Verificar SPF/DKIM do domínio remetente (Secção 4) |
| 550 5.7.23 | Falha de validação SPF — IP de envio não autorizado no SPF | Adicionar IP ao registo SPF do domínio remetente |
| 550 5.7.64 | TenantAttribution — envio relay não autorizado pelo tenant | Configurar conector de entrada com IP autorizado |
| 550 5.7.509 | DMARC falhou — domínio tem política p=reject | Corrigir SPF e/ou DKIM para passar DMARC alignment |
| 451 4.7.500 | Limite de envio temporariamente atingido (throttling) | Aguardar — o Exchange retenta automaticamente |
| 452 4.2.2 | Caixa de correio com quota cheia (temporário — pode esvaziar) | Aumentar quota ou arquivar emails da caixa |
💡 Referência completa de NDR: A Microsoft mantém uma lista atualizada de todos os códigos de NDR do Exchange Online em learn.microsoft.com — NDR Exchange Online.
4. SPF, DKIM e DMARC — Diagnóstico de Autenticação
A autenticação de email é a causa mais frequente de emails a ir para spam ou a serem rejeitados. Os três mecanismos trabalham em conjunto e devem estar todos corretamente configurados.
4.1 — Verificar estado atual via PowerShell
PowerShell — Exchange Online
# Verificar DKIM — estado de todos os domínios
Get-DkimSigningConfig | Select Domain, Enabled, Status, Selector1CNAME, Selector2CNAME
# Ativar DKIM para um domínio específico
Set-DkimSigningConfig -Identity empresa.pt -Enabled $true
# Verificar política DMARC via DNS (nslookup)
nslookup -type=TXT _dmarc.empresa.pt
4.2 — Configuração correta para Exchange Online
| Registo | Tipo DNS | Valor correto para M365 |
|---|---|---|
| SPF | TXT | v=spf1 include:spf.protection.outlook.com -all |
| DKIM Selector 1 | CNAME | selector1._domainkey → selector1-empresa-pt._domainkey.empresa.onmicrosoft.com |
| DKIM Selector 2 | CNAME | selector2._domainkey → selector2-empresa-pt._domainkey.empresa.onmicrosoft.com |
| DMARC | TXT | v=DMARC1; p=quarantine; rua=mailto:[email protected]; pct=100 |
| MX | MX | empresa-pt.mail.protection.outlook.com (prioridade 0) |
⚠️ SPF com múltiplos serviços: Se o domínio usar outros serviços de email além do M365 (ex: plataforma de newsletters, sistema CRM, servidor on-premises), todos os IPs/serviços de envio devem estar incluídos no SPF. Um SPF incompleto causa falhas de entrega intermitentes difíceis de diagnosticar. O SPF tem um limite de 10 lookups DNS — exceder este limite invalida o registo.
4.3 — Verificar cabeçalhos de autenticação de uma mensagem recebida
Para verificar se SPF, DKIM e DMARC passaram numa mensagem específica, analisar os cabeçalhos de email:
- No Outlook: abrir a mensagem → Ficheiro → Propriedades → Cabeçalhos de Internet
- Copiar o conteúdo completo e colar em Message Header Analyzer (ferramenta Microsoft gratuita)
- Localizar a linha
Authentication-Resultsnos cabeçalhos
Exemplo de cabeçalho Authentication-Results — tudo a passar
Authentication-Results: spf=pass smtp.mailfrom=empresa.pt;
dkim=pass header.d=empresa.pt;
dmarc=pass action=none header.from=empresa.pt
5. Quarentena e Anti-Spam
Mensagens bloqueadas pela proteção Exchange Online Protection (EOP) podem ir para quarentena em vez de serem entregues ou rejeitadas. O utilizador pode não receber qualquer aviso.
5.1 — Verificar e gerir a quarentena
- Aceder ao Microsoft Defender (security.microsoft.com)
- Navegar para Email e colaboração → Revisão → Quarentena
- Filtrar por remetente, destinatário ou data
- Selecionar a mensagem → “Libertar” para entregar na caixa de correio ou “Libertar e reportar”
PowerShell — Exchange Online
# Listar mensagens em quarentena para um destinatário
Get-QuarantineMessage -RecipientAddress [email protected] | Select Subject, SenderAddress, ReceivedTime, QuarantineTypes
# Libertar mensagem específica da quarentena
Release-QuarantineMessage -Identity <MessageIdentity> -User [email protected]
5.2 — Criar exceção anti-spam para remetente ou domínio
Se um remetente legítimo está a ser consistentemente bloqueado ou enviado para quarentena, adicionar uma exceção na política anti-spam:
PowerShell — Exchange Online
# Ver remetentes/domínios permitidos na política anti-spam predefinida
Get-HostedContentFilterPolicy -Identity Default | Select AllowedSenders, AllowedSenderDomains
# Adicionar domínio à lista de permitidos (usar com cautela)
Set-HostedContentFilterPolicy -Identity Default -AllowedSenderDomains @{Add=”parceiro.pt”}
⚠️ Atenção: Adicionar domínios inteiros à lista de permitidos desativa a filtragem de spam para todos os emails desse domínio, incluindo emails fraudulentos que falsifiquem o remetente. Preferir adicionar remetentes individuais em vez de domínios. Para parceiros confiáveis, usar antes um conector de entrada com IP fixo (Secção 6).
6. Conectores e Fluxo de Correio
Os conectores definem como o Exchange Online envia e recebe email de sistemas externos — servidores on-premises, aplicações, equipamentos de impressão/digitalização, ou parceiros. Um conector mal configurado é causa frequente de falhas de relay SMTP.
6.1 — Verificar conectores existentes
PowerShell — Exchange Online
# Listar conectores de entrada
Get-InboundConnector | Select Name, Enabled, SenderDomains, SenderIPAddresses, RequireTls
# Listar conectores de saída
Get-OutboundConnector | Select Name, Enabled, SmartHosts, TlsSettings, UseMxRecord
# Testar fluxo de correio via conector de saída
Validate-OutboundConnector -Identity “Nome do Conector” -Recipients [email protected]
6.2 — Configurar relay SMTP para aplicações e equipamentos
Para impressoras multifunções, sistemas de monitorização ou aplicações que precisem de enviar email via Exchange Online, existem três métodos:
| Método | Como funciona | Melhor para |
|---|---|---|
| Opção 1 — SMTP direto M365 | smtp.office365.com porta 587 com credenciais M365 | Aplicações com suporte a Modern Auth |
| Opção 2 — Relay direto | MX do tenant + conector de entrada com IP fixo autorizado | Impressoras, equipamentos sem suporte OAuth |
| Opção 3 — SMTP relay partilhado | smtp.office365.com porta 25 + conector entrada + SPF | Envio para destinatários externos |
PowerShell — Criar conector de entrada para relay por IP
New-InboundConnector -Name “Relay Impressoras” -ConnectorType OnPremises -SenderIPAddresses “192.168.1.50”,”192.168.1.51″ -RequireTls $false -CloudServicesMailEnabled $false
7. Regras de Transporte (Mail Flow Rules)
As regras de transporte podem modificar, redirecionar, bloquear ou colocar em cópia mensagens automaticamente. Quando um email desaparece, chega ao destinatário errado, ou chega com conteúdo alterado, as regras de transporte são o primeiro lugar a verificar.
7.1 — Listar e auditiar regras ativas
PowerShell — Exchange Online
# Listar todas as regras de transporte ativas
Get-TransportRule | Select Name, State, Priority, Description | Sort-Object Priority
# Ver detalhes completos de uma regra específica
Get-TransportRule -Identity “Nome da Regra” | Format-List
# Desativar temporariamente uma regra para teste
Disable-TransportRule -Identity “Nome da Regra”
7.2 — Verificar se uma mensagem foi afetada por regra
No Message Trace, se o estado de uma mensagem for Redirected ou se existir uma entrada com Transport Rule nos detalhes, confirmar qual a regra responsável:
PowerShell — Exchange Online
# Ver detalhes do rastreio incluindo ação de regras de transporte
Get-MessageTraceDetail -MessageId “<ID>” -RecipientAddress [email protected] | Where-Object {$_.Event -eq “Transport rule”} | Select Detail
8. Limites de Envio do Exchange Online
O Exchange Online impõe limites de envio que, quando atingidos, causam falhas temporárias ou permanentes. Conhecer estes limites evita erros em campanhas de email, notificações em massa ou processos automatizados.
| Limite | Valor | Âmbito |
|---|---|---|
| Destinatários por mensagem | 500 | Por email enviado |
| Destinatários por dia (utilizador) | 10 000 | Por caixa de correio / 24h |
| Mensagens por minuto | 30 | Por caixa de correio |
| Tamanho máximo de mensagem | 150 MB | Envio e receção |
| Tamanho máximo de anexo | 150 MB | Por mensagem |
| Membros de lista de distribuição | 100 000 | Por grupo |
| Expiração de mensagem na fila | 24 horas | Após falha de entrega temporária |
PowerShell — Verificar limites configurados na caixa de correio
# Ver limites de envio e receção de uma caixa de correio
Get-Mailbox -Identity [email protected] | Select MaxSendSize, MaxReceiveSize, RecipientLimits
# Verificar se conta está em modo restrito por envio de spam
Get-BlockedSenderAddress | Select SenderAddress, BlockedUntilDate, Reason
9. Checklist de Diagnóstico Rápido
📋 Percorrer esta checklist na ordem indicada. O Message Trace deve ser sempre o primeiro passo — fornece o motivo exato da falha e evita diagnósticos desnecessários.
| ✓ | Verificação | Ferramenta |
|---|---|---|
| ☐ | Executar Message Trace — identificar estado e evento de falha | EAC / PowerShell |
| ☐ | Se NDR recebida — interpretar código de erro (5.X.X ou 4.X.X) | Secção 3 / Microsoft Docs |
| ☐ | Verificar registo SPF do domínio remetente — inclui todos os IPs de envio | nslookup / MXToolbox |
| ☐ | DKIM ativo e com CNAMEs corretos no DNS | Get-DkimSigningConfig |
| ☐ | DMARC configurado com política e endereço de relatório rua= | nslookup _dmarc |
| ☐ | Verificar quarentena — mensagem pode estar retida sem NDR | security.microsoft.com |
| ☐ | Verificar regras de transporte ativas — redirecionar, bloquear ou modificar | Get-TransportRule |
| ☐ | Para relay externo — conector de entrada com IP autorizado configurado | Get-InboundConnector |
| ☐ | Verificar se conta de envio está na lista de remetentes bloqueados | Get-BlockedSenderAddress |
| ☐ | Confirmar que limites de envio não foram atingidos (10 000 dest./dia) | Get-Mailbox / Message Trace |
| ☐ | Cabeçalhos Authentication-Results confirmam spf=pass dkim=pass dmarc=pass | mha.azurewebsites.net |
