Halaman ini menjelaskan cara menemukan pesan yang disimpan di karantina admin Google Workspace menggunakan Mail Admin Quarantine API.
API ini menawarkan dua metode pada resource
customers.quarantinedMessages:
- Metode
listmenampilkan pesan yang dikarantina tanpa pemfilteran apa pun. Gunakan untuk melihat halaman semua item di karantina Anda. - Metode
searchmempersempit hasil dengan filter terstruktur, kueri penelusuran Gmail, atau keduanya. Gunakan untuk alur kerja triase, seperti hanya mengambil pesan masuk yang menunggu peninjauan.
Kedua metode menampilkan pesan dari 30 hari terakhir, dan keduanya menampilkan metadata dasar yang sama untuk setiap pesan. Untuk mengambil header, isi, lampiran, atau pesan mentah, lihat Mendapatkan detail pesan.
Prasyarat
- Anda telah menyelesaikan langkah-langkah di bagian Menyiapkan API.
- Token akses yang meniru identitas administrator dengan hak istimewa karantina admin dan menyertakan cakupan
https://www.googleapis.com/auth/gmail.admin.quarantineatauhttps://www.googleapis.com/auth/gmail.admin.quarantine.readonly. Lihat Memberikan otorisasi dengan delegasi tingkat domain.
Mencantumkan pesan yang dikarantina
Untuk mencantumkan pesan yang dikarantina, kirim permintaan GET ke metode
list
pada resource
customers.quarantinedMessages
pelanggan Anda:
GET https://mailadminquarantine.googleapis.com/v1/customers/CUSTOMER_ID/quarantinedMessages?pageSize=50
Authorization: Bearer ACCESS_TOKEN
Ganti CUSTOMER_ID dengan ID pelanggan Anda.
Metode list menerima parameter kueri berikut:
| Parameter | Deskripsi |
|---|---|
pageSize |
Jumlah maksimum pesan yang akan ditampilkan per halaman, dari 1 hingga 300. Selalu tetapkan parameter ini secara eksplisit. |
pageToken |
Nilai nextPageToken dari respons sebelumnya. Gunakan token ini untuk mengambil halaman berikutnya. |
Menelusuri pesan yang dikarantina
Untuk menelusuri pesan yang dikarantina, kirim permintaan POST ke
metode kustom
:search
pada resource customers.quarantinedMessages dengan isi 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
}
Isi permintaan menerima kolom berikut. Semua kolom bersifat opsional:
| Kolom | Deskripsi |
|---|---|
filter |
Filter terstruktur dalam sintaksis AIP-160. Lihat Sintaksis filter. |
query |
Kueri penelusuran Gmail, seperti has:attachment atau from:suspicious@example.com. Kueri menggunakan operator yang sama dengan kotak penelusuran Gmail. Lihat Operator penelusuran yang dapat digunakan dengan Gmail. |
pageSize |
Jumlah maksimum pesan yang akan ditampilkan per halaman, dari 1 hingga 300. Selalu tetapkan kolom ini secara eksplisit. |
pageToken |
Nilai nextPageToken dari respons sebelumnya. |
Jika Anda menetapkan filter dan query, API hanya akan menampilkan pesan yang cocok dengan keduanya.
Filter sintaksis
Kolom filter mendukung kolom berikut. Gabungkan dengan
operator AND. Operator lain, seperti OR dan NOT, tidak didukung.
| Kolom | Perbandingan yang didukung | Nilai |
|---|---|---|
status |
= |
PENDING_TRIAGE, RELEASED, atau DENIED. |
direction |
=, != |
INBOUND atau OUTBOUND. |
quarantine_name (atau quarantineName) |
= |
Nama tampilan karantina seperti yang ditampilkan di konsol Google Admin, misalnya "Default". |
Contoh berikut menunjukkan filter yang valid:
status = PENDING_TRIAGE
status = PENDING_TRIAGE AND direction = INBOUND
direction != OUTBOUND AND quarantine_name = "Default"
Filter yang tidak valid akan menampilkan error 400 INVALID_ARGUMENT.
Respons
Kedua metode ini menampilkan daftar resource
QuarantinedMessage
dengan metadata dasar, ditambah nextPageToken jika ada lebih banyak hasil yang
tersedia:
{
"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..."
}
| Kolom | Deskripsi |
|---|---|
name |
Nama resource pesan. Gunakan dalam panggilan get, release, dan deny berikutnya pada resource customers.quarantinedMessages. |
messageId |
ID pesan Gmail yang tidak dapat diubah. |
messageOwner |
Alamat email kotak surat yang memiliki pesan. |
quarantines |
Nama resource karantina yang menyimpan pesan. Panggil metode get dari resource customers.quarantines untuk mendapatkan nama tampilan karantina. |
receiveTime |
Waktu Gmail menerima pesan. |
direction |
INBOUND jika pengguna menerima pesan, atau OUTBOUND jika pengguna mengirimkannya. |
state |
PENDING_TRIAGE, RELEASED, atau DENIED. |
retentionExpireTime |
Saat karantina berhenti mempertahankan pesan. |
triggeredRules |
Aturan yang menyebabkan pesan dikarantina. |
unreachable |
Akun yang pesannya dikarantina tidak dapat diambil oleh layanan. Jika ada, coba lagi permintaan tersebut nanti. |
Menelusuri hasil
Untuk mengambil semua pesan yang cocok:
- Kirim permintaan pertama dengan
pageSize. - Jika respons berisi
nextPageToken, ulangi permintaan dengan parameter yang sama dan tetapkanpageTokenke nilai tersebut. - Berhenti saat respons tidak berisi
nextPageToken.
Contoh Python berikut menampilkan semua pesan masuk yang menunggu triase:
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.')