Questa pagina spiega come trovare i messaggi conservati nelle quarantene amministrative di Google Workspace utilizzando l'API Mail Admin Quarantine.
L'API offre due metodi per la risorsa customers.quarantinedMessages:
- Il metodo
listrestituisce i messaggi in quarantena senza alcun filtro. Utilizzala per scorrere tutti gli elementi in quarantena. - Il metodo
searchrestringe i risultati con un filtro strutturato, una query di ricerca di Gmail o entrambi. Utilizzalo per i workflow di triage, ad esempio per recuperare solo i messaggi in entrata in attesa di revisione.
Entrambi i metodi restituiscono i messaggi degli ultimi 30 giorni e gli stessi metadati di base per ogni messaggio. Per recuperare le intestazioni, il corpo, gli allegati o il messaggio non elaborato, consulta Recupera i dettagli dei messaggi.
Prerequisiti
- Hai completato i passaggi descritti in Configura l'API.
- Un token di accesso che impersona un amministratore con un privilegio di quarantena amministrativa e include l'ambito
https://www.googleapis.com/auth/gmail.admin.quarantineohttps://www.googleapis.com/auth/gmail.admin.quarantine.readonly. Vedi Autorizza con la delega a livello di dominio.
Elenca i messaggi in quarantena
Per elencare i messaggi in quarantena, invia una richiesta GET al metodo list sulla risorsa customers.quarantinedMessages del tuo cliente:
GET https://mailadminquarantine.googleapis.com/v1/customers/CUSTOMER_ID/quarantinedMessages?pageSize=50
Authorization: Bearer ACCESS_TOKEN
Sostituisci CUSTOMER_ID con il tuo ID cliente.
Il metodo list accetta i seguenti parametri di query:
| Parametro | Descrizione |
|---|---|
pageSize |
Il numero massimo di messaggi da restituire per pagina, da 1 a 300. Imposta sempre questo parametro in modo esplicito. |
pageToken |
Il valore nextPageToken di una risposta precedente. Utilizzalo per recuperare la pagina successiva. |
Cerca i messaggi in quarantena
Per cercare i messaggi in quarantena, invia una richiesta POST al metodo personalizzato :search sulla risorsa customers.quarantinedMessages con un corpo JSON:
POST https://mailadminquarantine.googleapis.com/v1/customers/CUSTOMER_ID/quarantinedMessages:search
Authorization: Bearer ACCESS_TOKEN
Content-Type: application/json
{
"filter": "status = PENDING_TRIAGE AND direction = INBOUND",
"query": "from:suspicious@example.com",
"pageSize": 50
}
Il corpo della richiesta accetta i seguenti campi. Tutti i campi sono facoltativi:
| Campo | Descrizione |
|---|---|
filter |
Un filtro strutturato nella sintassi AIP-160. Consulta Sintassi filtro. |
query |
Una query di ricerca di Gmail, ad esempio has:attachment o from:suspicious@example.com. La query utilizza gli stessi operatori della casella di ricerca di Gmail. Vedi Operatori di ricerca utilizzabili in Gmail. |
pageSize |
Il numero massimo di messaggi da restituire per pagina, da 1 a 300. Imposta sempre questo campo in modo esplicito. |
pageToken |
Il valore nextPageToken di una risposta precedente. |
Quando imposti sia filter sia query, l'API restituisce solo i messaggi che corrispondono a entrambi.
Sintassi filtro
Il campo filter supporta i seguenti campi. Combinali con l'operatore AND. Altri operatori, come OR e NOT, non sono supportati.
| Campo | Confronti supportati | Valori |
|---|---|---|
status |
= |
PENDING_TRIAGE, RELEASED o DENIED. |
direction |
=, != |
INBOUND o OUTBOUND. |
quarantine_name (o quarantineName) |
= |
Il nome visualizzato di una quarantena, come mostrato nella Console di amministrazione Google, ad esempio "Default". |
I seguenti esempi mostrano filtri validi:
status = PENDING_TRIAGE
status = PENDING_TRIAGE AND direction = INBOUND
direction != OUTBOUND AND quarantine_name = "Default"
Un filtro non valido restituisce un errore 400 INVALID_ARGUMENT.
Risposta
Entrambi i metodi restituiscono un elenco di risorse QuarantinedMessage con metadati di base, oltre a un nextPageToken se sono disponibili altri risultati:
{
"quarantinedMessages": [
{
"name": "customers/01abc23de/quarantinedMessages/user@example.com:18d3ef45a8b2c1d0",
"messageId": "18d3ef45a8b2c1d0",
"messageOwner": "user@example.com",
"quarantines": [
"customers/01abc23de/quarantines/0"
],
"receiveTime": "2026-09-22T10:15:30Z",
"direction": "INBOUND",
"state": "PENDING_TRIAGE",
"retentionExpireTime": "2026-10-22T10:15:30Z",
"triggeredRules": [
{
"policyId": "123",
"ruleId": "456",
"displayName": "Inbound phishing protection"
}
]
}
],
"nextPageToken": "CAESBAgBEA..."
}
| Campo | Descrizione |
|---|---|
name |
Il nome della risorsa del messaggio. Utilizzalo nelle chiamate get, release e deny successive sulla risorsa customers.quarantinedMessages. |
messageId |
L'ID messaggio Gmail immutabile. |
messageOwner |
L'indirizzo email della casella di posta proprietaria del messaggio. |
quarantines |
I nomi delle risorse delle quarantene che contengono il messaggio. Chiama il metodo get della risorsa customers.quarantines per ottenere il nome visualizzato di una quarantena. |
receiveTime |
Quando Gmail ha ricevuto il messaggio. |
direction |
INBOUND se un utente ha ricevuto il messaggio o OUTBOUND se un utente lo ha inviato. |
state |
PENDING_TRIAGE, RELEASED o DENIED. |
retentionExpireTime |
Quando la quarantena smette di conservare il messaggio. |
triggeredRules |
Le regole che hanno causato la messa in quarantena del messaggio. |
unreachable |
Account per i quali il servizio non ha potuto recuperare i messaggi in quarantena. Se presente, riprova a inviare la richiesta in un secondo momento. |
Scorri i risultati
Per recuperare tutti i messaggi corrispondenti:
- Invia la prima richiesta con un
pageSize. - Se la risposta contiene un
nextPageToken, ripeti la richiesta con gli stessi parametri e impostapageTokensu quel valore. - Interrompi quando la risposta non contiene un
nextPageToken.
Il seguente esempio di Python mostra tutte le pagine dei messaggi in entrata in attesa di triage:
import requests
BASE_URL = 'https://mailadminquarantine.googleapis.com/v1'
CUSTOMER_ID = '01abc23de' # Your customer ID without the leading 'C'.
headers = {
'Authorization': f'Bearer {access_token}',
'Content-Type': 'application/json',
}
search_url = f'{BASE_URL}/customers/{CUSTOMER_ID}/quarantinedMessages:search'
body = {
'filter': 'status = PENDING_TRIAGE AND direction = INBOUND',
'pageSize': 100,
}
messages = []
while True:
response = requests.post(search_url, headers=headers, json=body)
response.raise_for_status()
result = response.json()
messages.extend(result.get('quarantinedMessages', []))
page_token = result.get('nextPageToken')
if not page_token:
break
body['pageToken'] = page_token
print(f'Found {len(messages)} messages pending triage.')