Gerir a quarentena pós-entrega do Sophos Email através da API
A quarentena pós-entrega contém mensagens entregues primeiro e depois removidas da caixa de correio pelo Post-Delivery Protection. A API utiliza, por isso, a família de caminhos separada /post-delivery-quarantine. Os endpoints semelhantes em /quarantine dizem respeito à quarentena normal antes da entrega e não são intercambiáveis.
A sequência segura é pesquisar com precisão, verificar resultado e destinatário, inspecionar mensagem ou anexos, alterar apenas os ID aprovados e voltar a consultar o estado. Introdução à Email Management API contextualiza as famílias. Preparar OAuth2, tenant e encaminhamento regional fornece os valores de acesso usados aqui.
Estabelecer pré-requisitos e base dos pedidos
O Post-Delivery Protection tem de estar ativo para o domínio, tem de existir um service principal e a sua permissão de Post-Delivery Quarantine deve estar confirmada. Utilize apenas estes valores validados:
SOPHOS_ACCESS_TOKEN: token Bearer atual;SOPHOS_TENANT_ID: UUID do tenant de destino;SOPHOS_API_HOST: host regional descoberto para esse tenant específico.
EMAIL_API_HOST="${SOPHOS_API_HOST%/}/email/v1"
Cada chamada envia o cabeçalho Authorization com Bearer seguido do SOPHOS_ACCESS_TOKEN atual, o cabeçalho X-Tenant-ID com o valor SOPHOS_TENANT_ID e Accept: application/json; os pedidos JSON enviam também Content-Type: application/json. Tenant, token e host têm de corresponder. Resolva 403 verificando permissão de API e atribuição do tenant, não experimentando outros tenants. Os exemplos baseiam-se na Email Management API v1.4.0 analisada; reveja o contrato atual antes da implementação.
Pesquisar mensagens pós-entrega com precisão
POST /post-delivery-quarantine/messages/search exige beginDate e endDate. São opcionais page (a partir de 1), pageSize (predefinição 50, máximo 100), sort e filter. Filtros documentados: id, fromContains, toContains, subjectContains, attachmentNameContains, sizeInMBGreaterThan, sizeInMBLowerThan, productType, reason, hasAnyAttachment. productType aceita mailflow, gateway ou ems; reason aceita malware, maliciousUrl ou onDemand.
Comece com uma janela UTC curta e atributos conhecidos:
POST /email/v1/post-delivery-quarantine/messages/search
{
"beginDate": "2026-09-15T08:00:00.000Z",
"endDate": "2026-09-15T09:00:00.000Z",
"page": 1,
"pageSize": 50,
"sort": ["quarantinedAt:DESC"],
"filter": {
"toContains": "user@example.com",
"reason": ["onDemand"]
}
}
Substitua hora e endereço pelo âmbito aprovado. A resposta contém items e pages. Comece na página 1 e incremente page exatamente em um. Se pages.total estiver presente, pare ao atingir esse total; caso contrário, pare na primeira página vazia ou com menos itens do que o pageSize pedido. Defina previamente limites máximos de páginas e de tempo de execução e marque a pesquisa como incompleta se a paginação for inválida, se repetir, não avançar ou atingir um dos limites. Antes de alterar, compare pelo menos id, forRecipient, quarantinedAt, reason, assunto e tenant. O id vem do cabeçalho MIME X-Sophos-Email-ID, não do Message-ID MIME nem de o365MessageId.
Inspecionar conteúdo e anexos
GET /post-delivery-quarantine/messages/{id}/previewdevolveheaderse, quando existirem,htmlBodyetextBody.GET /post-delivery-quarantine/messages/{id}/attachments?page=1&pageSize=50devolve nomes esizeInBytescompages. As predefinições são página 1 e 50 itens; a resposta pode suportar até 500 itens por página.
A pré-visualização pode conter conteúdo malicioso e confidencial. Não renderize HTML ativamente, não abra links nem registe respostas sem filtragem. A listagem ainda não transfere ficheiros.
Para transferir, envie os nomes dos anexos para POST /post-delivery-quarantine/messages/{id}/attachments/download. Sem attachments, a tarefa transfere todos; prefira uma lista explícita:
{
"attachments": ["suspect-document.zip"]
}
A resposta contém id e status da tarefa. Esse id é o downloadId para:
GET /email/v1/post-delivery-quarantine/downloads/{downloadId}/status
Enquanto status for processing, consulte com intervalo limitado. Com completed, a resposta contém nomes e url; num ZIP protegido pode também existir password. Com failed, analise error em vez de reiniciar indefinidamente. Abra ficheiros apenas num ambiente isolado e não coloque URL nem palavra-passe em registos ou tickets.
Libertar ou eliminar
Ambas as operações aceitam no máximo 50 elementos em items. Cada um requer o id pós-entrega; forRecipients limita a ação a destinatários específicos. Sem forRecipients, o guia aplica-a a todos os destinatários da mensagem.
{
"items": [
{
"id": "11111111-1111-4111-8111-111111111111",
"forRecipients": ["user@example.com"]
}
]
}
POST /post-delivery-quarantine/messages/releasecoloca mensagens em fila para libertação. HTTP202significa aceite, não confirmado na caixa.POST /post-delivery-quarantine/messages/deleteelimina mensagens. A especificação revista devolve HTTP200com sucesso; não trate esta eliminação como tarefa de transferência.
Antes da libertação, documente conteúdo, âmbito de destinatários e aprovação. Preserve ou exporte as provas necessárias à investigação antes de qualquer operação de escrita. Um delete bem-sucedido não tem uma operação API documentada para anular ou restaurar; exija a aprovação da eliminação e escale qualquer dúvida antes desse passo irreversível. Um release volta a entregar a mensagem, mas não torna repetível a retirada original da caixa de correio. Não repita cegamente após timeout ou 5xx: o efeito no servidor pode já ter ocorrido.
Validar resultados e falhas parciais
Libertação e eliminação devolvem arrays separados items e errors. Antes de enviar, expanda o pedido aprovado em pares concretos (id, recipient) e reconcilie cada par pedido exatamente uma vez entre os dois arrays: uma entrada bem-sucedida de items contém apenas id e recipient, enquanto uma entrada falhada de errors contém id, recipient e error. Considere a resposta inválida e aplique fail-closed se faltar um par pedido, se estiver duplicado, se surgir em ambos os arrays ou se for devolvido um par não pedido. Registe o resultado e o error devolvido para cada par, sem conteúdo ou tokens. Repita apenas pares falhados que continuem válidos após a verificação do estado e tenham sido novamente aprovados; nunca repita pares bem-sucedidos ou ambíguos.
Pesquise depois novamente o mesmo id e destinatário. Após eliminação bem-sucedida, o item já não deve surgir no âmbito escolhido; esta validação confirma o resultado destrutivo, não um meio de recuperação. Após libertação aceite, aguarde a mudança de estado e confirme na caixa de destino que a mensagem regressou ao destinatário previsto. Essa confirmação de entrega não prova que a retirada original possa ser executada novamente. Se o item continuar na pesquisa ou a mensagem não estiver na caixa, verifique destinatário, estado PDP e erro antes de reavaliar essa parte.
- sem resultado: verifique janela UTC, página, tenant, tipo de ID e estado PDP;
404em pré-visualização, anexos ou tarefa: verifique host regional, caminho post-delivery e ID;- transferência
failed: analiseerrore compare nomes com a lista atual; - resposta em massa mista: reconcilie todos os pares pedidos e repita apenas falhas ainda válidas e novamente aprovadas; aplique fail-closed a resultados em falta, duplicados, contraditórios ou inesperados;
- resultado apenas na quarentena normal: prossiga com
/quarantine, sem transferir a mensagem para post-delivery.
Assim, a automatização permanece associada ao tenant, consciente do estado e repetível, sem confundir as duas quarentenas.