#pArchiveSources
nextxch Archive: Microsoft 365, Exchange, Google Workspace e IMAP no arquivo GoBD
O nextxch Archive leva para o arquivo GoBD os e-mails de sistemas que não rodam no nextxch. Quatro tipos de fonte estão disponíveis no admin, em Compliance > Fontes de arquivo: diário SMTP (relatórios de diário do Microsoft 365 e do Exchange, regra de cópia do Google Workspace, cópias em Cco de qualquer MTA), IMAP (qualquer servidor, somente leitura), Microsoft 365 via Microsoft Graph e Google Workspace via Gmail API. Cada caixa de correio da origem se torna uma caixa de correio arquivada, sem login e sem tráfego de e-mail; pesquisa, Legal Hold, exportação de evidências e restauração funcionam nela como nas suas próprias caixas de correio.
Combinação recomendada: o diário SMTP para a captura contínua completa a partir de uma data de corte (os usuários não conseguem excluir nada antes de ser capturado), mais a fonte API uma vez ou em intervalo longo para os e-mails existentes e a visualização por pastas. Ambos gravam no mesmo arquivo; uma mensagem capturada duas vezes é armazenada apenas uma vez graças ao SHA-256. Licença: caixas de correio arquivadas de outros sistemas são uma linha de licença separada; as suas próprias caixas de correio do nextxch não contam nela. 10 caixas de correio arquivadas são grátis em todos os níveis; mais vêm com uma licença Business ou Enterprise.
1. Início rápido: criar uma fonte de diário para o Microsoft 365
Novas fontes começam desativadas. Teste a conexão e depois ative a fonte. Quando apenas o domínio é informado, o servidor gera o endereço de diário com um token secreto; o MX desse domínio deve apontar para o nextxch.
# 1. Admin > Compliance > Archive sources > New source, kind "SMTP journal"
# Domains of the old environment: company.com · journal domain: archive.company.com
# -> journal address e.g. journal-k3x9q2m7v1c8b4n6z5ta@archive.company.com (copy it)
# 2. Protection: IP ranges of the Exchange Online servers, TLS required, allowed envelope senders
# 3. Microsoft Purview: Solutions > Data lifecycle management > Exchange (legacy) > Journal rules
# or Exchange Online PowerShell:
Set-TransportConfig -JournalingReportNdrTo journal-ndr@archive.company.com
New-JournalRule -Name "nextxch Archive" -JournalEmailAddress journal-k3x9q2m7v1c8b4n6z5ta@archive.company.com -Scope Global -Enabled $true
Get-JournalRule | Format-Table Name,Enabled,JournalEmailAddress,Scope
# 4. Send a test message: the source shows the original with all envelope recipients (including Bcc)
2. Diário a partir do Exchange on-premises e do Google Workspace
Exchange on-premises: regra de diário com o mesmo endereço de diário (registro em diário premium, requer a Exchange Enterprise CAL) ou registro em diário padrão por banco de dados de caixas de correio para esse endereço; em um ambiente híbrido, crie a regra também no servidor Exchange on-premises. Google Workspace: uma regra de roteamento adiciona o endereço de diário como destinatário extra; o Google Vault não é necessário. Com "Comprehensive mail storage", os e-mails do SMTP relay e dos serviços do Google também chegam às caixas de correio. Qualquer outro MTA envia cópias em Cco para o endereço de diário.
# Exchange Server (Exchange Management Shell)
New-JournalRule -Name "nextxch Archive" -JournalEmailAddress journal-k3x9q2m7v1c8b4n6z5ta@archive.company.com -Scope Global -Enabled $true
# Google Admin console: Menu > Apps > Google Workspace > Gmail > Routing > Configure
# Messages to affect: inbound, outbound, internal inbound, internal outbound
# Action: Modify message > Add more recipients > Advanced > journal address
# Optional: do not deliver spam to this recipient, suppress bounces from this recipient
# Journal source in nextxch: format bcc or auto, IP ranges of Google's outbound servers, TLS required
3. IMAP: qualquer servidor, somente leitura
As pastas são abertas com EXAMINE e o conteúdo é obtido com BODY.PEEK[]; as flags na origem nunca mudam. Um cursor por pasta (UIDVALIDITY, último UID, HIGHESTMODSEQ com CONDSTORE) é atualizado após cada mensagem; uma interrupção é retomada exatamente ali. TLS é obrigatório (implícito ou STARTTLS), opcionalmente com certificado fixado (SHA-256); login com senha ou XOAUTH2, uma conta ou uma lista de contas. Lixeira e spam são ignorados por padrão.
{
"host": "imap.oldhoster.com",
"tls": "implicit",
"auth": "password",
"mode": "single",
"username": "accounting@company.com",
"address": "accounting@company.com",
"excludeFolders": ["Drafts"],
"since": "2016-01-01",
"maxConnections": 2
}
# Secret: password (or oauthToken with xoauth2), in list mode accounts/<id>/password
4. Microsoft 365 via Microsoft Graph: registro de aplicativo no Entra ID
A fonte lê e-mails existentes e novos com consultas delta por pasta, sem EWS (a Microsoft está descontinuando o EWS no Exchange Online). Permissões de aplicativo no Microsoft Graph com consentimento do administrador: Mail.Read e User.Read.All, GroupMember.Read.All somente com o filtro de usuários "group". Login com certificado (recomendado) ou segredo do cliente, nuvens global, usgov, usgovdod e china. O throttling do Graph (429 com Retry-After) é respeitado; uma execução é retomada na última página totalmente processada. Mensagens excluídas na origem permanecem no arquivo. Opcionalmente, o Exchange Online RBAC for Applications limita o acesso a um grupo.
# Entra admin center > App registrations > New registration "nextxch Archive" (single tenant)
# API permissions > Microsoft Graph > Application permissions:
# Mail.Read, User.Read.All (+ GroupMember.Read.All with group filter) > Grant admin consent
# Certificates & secrets: upload a certificate (.cer) or create a client secret
{
"tenantId": "company.onmicrosoft.com",
"clientId": "11111111-2222-3333-4444-555555555555",
"credentialType": "certificate",
"cloud": "global",
"userFilter": { "mode": "group", "groupId": "99999999-0000-0000-0000-000000000009" },
"sinceUtc": "2019-01-01T00:00:00Z"
}
# Secrets: certificatePfx (Base64) + certificatePassword or clientSecret (the value, not the ID)
5. Google Workspace via Gmail API: conta de serviço e delegação em todo o domínio
Uma conta de serviço no próprio projeto Google Cloud do cliente (as cotas do Gmail contam por projeto) com a Gmail API e a Admin SDK API ativadas. No Admin console, o ID numérico do cliente é autorizado para delegação em todo o domínio com os escopos gmail.readonly e admin.directory.user.readonly, mais admin.directory.group.member.readonly para o filtro "group". Importação inicial via messages.list e messages.get (raw), depois sincronização pelo histórico; se o histórico tiver expirado, a importação recomeça e as mensagens já arquivadas contam como duplicatas. O orçamento de cota por usuário e por projeto é ajustável.
# Admin console: Security > Access and data control > API controls > Domain-wide delegation
# client ID (numeric) + scopes:
# https://www.googleapis.com/auth/gmail.readonly,
# https://www.googleapis.com/auth/admin.directory.user.readonly
{
"adminSubject": "admin@company.com",
"domain": "company.com",
"userFilter": "orgUnit",
"orgUnitPath": "/Sales",
"sinceUtc": "2018-01-01T00:00:00Z",
"quotaUnitsPerUserMinute": 4800
}
# Secret: serviceAccountKey (JSON key file of the service account)
6. Armazenamento, retenção WORM e Legal Hold
Cada caixa de correio arquivada tem seu próprio armazenamento exclusivo de arquivo no arquivo GoBD. Por mensagem: endereço de conteúdo SHA-256 com deduplicação entre todas as caixas de correio, verificação de duplicatas por caixa de correio via SHA-256 e Message-ID, retenção WORM e Legal Hold da fonte no blob e na mensagem, uma cadeia de hashes como prova contra adulteração e um índice de texto completo. O histórico por execução conta as mensagens armazenadas, duplicadas e rejeitadas.
Retention RetentionDays 0..36500 (0 = no WORM retention)
Mode Normal | Governance | Compliance (default)
Legal hold per source, also applies to already archived messages
Storage local or S3 with Object Lock (like the rest of the GoBD archive)
Status per mailbox: last run, next run, stored, duplicates, rejected, errors
7. Pesquisa, exportação, restauração
As caixas de correio arquivadas podem ser escolhidas como escopo separado na pesquisa de compliance (pesquisa em alemão com decomposição de palavras compostas, OCR em anexos, campos ZUGFeRD), e cada uma tem botões de pesquisa, exportação de evidências e restauração na lista. A exportação de evidências gera um ZIP com os arquivos .eml originais e um manifesto assinado com Ed25519 (veja o capítulo 17a). A restauração copia para uma caixa de correio do nextxch; o arquivo permanece inalterado. A restauração de volta ao Microsoft 365, ao Google ou ao servidor IMAP ainda não está disponível; a exportação cobre esse caso. Pesquisa em todos os níveis, tarefas de exportação de evidências e restauração a partir do Business.
# Search in an archived mailbox
curl -s "https://mail.company.com/api/compliance/search?archivedMailboxId=<id>&q=invoice&limit=100" -H "X-Api-Key: $KEY"
# Evidence export of an archived mailbox (202, status under GET /api/compliance/exports/{id})
curl -X POST https://mail.company.com/api/compliance/exports -H "X-Api-Key: $KEY" -H "Content-Type: application/json" \
-d '{"scope":"mailbox","archivedMailboxId":"<id>","caseReference":"case 4711"}'
# Restore into a nextxch mailbox
curl -X POST https://mail.company.com/api/compliance/restore/jobs -H "X-Api-Key: $KEY" -H "Content-Type: application/json" \
-d '{"source":"archive","account":"archived:<id>","target":"account","targetAccount":"successor@company.com"}'
8. API de administração: /api/admin/archive-sources
TenantAdmin dentro do próprio tenant, ServerAdmin em todos; o ComplianceAuditor lê (para escolher caixas de correio arquivadas para pesquisa e exportação), mas nunca altera nada. Kind é Journal, Imap, Microsoft365 ou Google. A ativação de uma caixa de correio além da cota da licença é recusada com uma mensagem que inclui a linha de licença atual. Fontes de diário recebem por SMTP; não há execução para elas (409 JOURNAL_IS_PUSHED).
GET /api/admin/archive-sources sources, licence line, available kinds with fields
GET /api/admin/archive-sources/license used, allowed, free, remaining
POST /api/admin/archive-sources create a source
GET /api/admin/archive-sources/{id} source, mailboxes, names of the secrets
PUT /api/admin/archive-sources/{id} change (settings, retention, legal hold, schedule)
DELETE /api/admin/archive-sources/{id} delete
POST /api/admin/archive-sources/{id}/test connection test
POST /api/admin/archive-sources/{id}/discover discover mailboxes
GET /api/admin/archive-sources/{id}/mailboxes archived mailboxes
PUT /api/admin/archive-sources/{id}/mailboxes/{mbxId} {"enabled": true} within the licence line
POST /api/admin/archive-sources/{id}/run fetch now, optionally {"mailboxId": "..."}
GET /api/admin/archive-sources/{id}/runs history (mailboxId, limit)
curl -X POST https://mail.company.com/api/admin/archive-sources -H "X-Api-Key: $KEY" -H "Content-Type: application/json" -d '{
"kind": "Journal", "name": "Microsoft 365 journal", "journalDomain": "archive.company.com",
"settings": { "domains": ["company.com"], "allowedSenderNetworks": ["203.0.113.0/24"], "requireTls": true },
"retentionDays": 3650, "lockMode": "Compliance" }'
Configurações, valores padrão e boas práticas
| Configuração / local | Descrição | Valor padrão | Boa prática para produção |
|---|---|---|---|
Journal: Domains (domains) |
Somente endereços de envelope desses domínios e de seus subdomínios se tornam caixas de correio arquivadas (na primeira ocorrência, enquanto a descoberta automática estiver ativa). Mensagens sem endereço correspondente vão para o armazenamento "diário sem atribuição" da fonte, que não conta para a licença. | leer · automatische Erkennung an |
Informe todos os domínios do ambiente antigo; caso contrário, faltarão caixas de correio na atribuição. |
Journal: Schutz (allowedSenderNetworks, requireTls, allowedEnvelopeSenders) |
Endereços IP ou faixas CIDR permitidos dos servidores remetentes, aceitação somente via TLS (STARTTLS ou implícito) e remetentes de envelope permitidos (endereço, *@domínio ou domínio). Um endereço de diário precisa de uma lista de IPs ou de um token secreto na parte local (no mínimo 16 caracteres, gerado pelo servidor). | keine IP-Liste · TLS aus · alle Absender |
Defina as faixas de IP do provedor e exija TLS; mantenha também o token. |
Journal: Format (format) |
auto detecta um relatório de diário por X-MS-Journal-Report; envelope força a análise como relatório do Exchange ou do Microsoft 365; bcc trata cada mensagem como cópia (regra de cópia do Google, outros MTAs). | auto |
Mantenha auto, a menos que um MTA envie cópias em Cco com cabeçalhos próprios. |
Aufbewahrung (RetentionDays, LockMode) |
Retenção WORM em dias por fonte (0 a 36.500, 0 = sem retenção WORM) com modo Normal, Governance ou Compliance. Aplica-se ao blob e à mensagem de cada e-mail arquivado. | Compliance |
Escolha o prazo legal para correspondência comercial e registros contábeis; o modo Compliance não pode ser suspenso antes de expirar. |
Legal Hold (LegalHold) |
Bloqueia todas as mensagens da fonte contra exclusão, também além da retenção. Ao ser ativado, o bloqueio também é aplicado às mensagens já arquivadas; cada alteração é registrada no log de auditoria. | aus |
Ative em caso de litígio ou auditoria e desative somente após a liberação pelo jurídico. |
Zeitplan und Erkennung (ScheduleMinutes, AutoDiscover) |
Intervalo de coleta das fontes API (IMAP, Microsoft 365, Google) de 5 minutos a 7 dias; em um cluster, somente o líder faz a coleta. Fontes de diário recebem por SMTP e não têm agendamento. | 60 min |
Para a importação inicial de tenants grandes, inicie a execução manualmente e acompanhe o histórico por caixa de correio. |
Geheimnisse (Secrets) |
Senhas, segredos do cliente, certificados e chaves de contas de serviço são armazenados criptografados no keyring do servidor. Eles são somente gravação: as respostas da API trazem apenas os nomes, nunca os valores, e eles nunca aparecem em logs. | verschlüsselt |
Fique atento à expiração do segredo do cliente e do certificado; o teste de conexão informa um segredo expirado. |