Bu sayfada, Mail Admin Quarantine API'yi kullanarak Google Workspace yönetici karantinalarınızda tutulan iletileri nasıl bulacağınız açıklanmaktadır.
API, customers.quarantinedMessages kaynağında iki yöntem sunar:
listyöntemi, karantinaya alınan iletileri herhangi bir filtreleme olmadan döndürür. Karantinalarınızdaki her şeye göz atmak için bu seçeneği kullanın.searchyöntemi, sonuçları yapılandırılmış bir filtre, Gmail arama sorgusu veya her ikisiyle daraltır. Bu özelliği, yalnızca inceleme bekleyen gelen iletileri alma gibi triyaj iş akışları için kullanın.
Her iki yöntem de son 30 güne ait mesajları ve her mesaj için aynı temel meta verileri döndürür. Üstbilgileri, gövdeyi, ekleri veya ham iletiyi almak için İleti ayrıntılarını alma başlıklı makaleyi inceleyin.
Ön koşullar
- API'yi ayarlama başlıklı makaledeki adımları tamamlamış olmanız gerekir.
- Yönetici karantinası ayrıcalığına sahip bir yöneticiyi taklit eden ve
https://www.googleapis.com/auth/gmail.admin.quarantineveyahttps://www.googleapis.com/auth/gmail.admin.quarantine.readonlykapsamını içeren bir erişim jetonu. Alan genelinde yetkiyle yetkilendirme başlıklı makaleyi inceleyin.
Karantinaya alınan iletileri listeleme
Karantinaya alınan iletileri listelemek için müşterinizin customers.quarantinedMessages kaynağındaki list yöntemine bir GET isteği gönderin:
GET https://mailadminquarantine.googleapis.com/v1/customers/CUSTOMER_ID/quarantinedMessages?pageSize=50
Authorization: Bearer ACCESS_TOKEN
CUSTOMER_ID yerine müşteri kimliğinizi yazın.
list yöntemi aşağıdaki sorgu parametrelerini kabul eder:
| Parametre | Açıklama |
|---|---|
pageSize |
Sayfa başına döndürülecek maksimum mesaj sayısı (1 ile 300 arasında). Bu parametreyi her zaman açıkça ayarlayın. |
pageToken |
Önceki bir yanıttan alınan nextPageToken değeri. Sonraki sayfayı almak için bunu kullanın. |
Karantinaya alınmış iletileri arama
Karantinaya alınmış iletileri aramak için JSON gövdesiyle customers.quarantinedMessages kaynağındaki :search özel yöntemine bir POST isteği gönderin:
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
}
İstek içeriği aşağıdaki alanları kabul eder. Tüm alanlar isteğe bağlıdır:
| Alan | Açıklama |
|---|---|
filter |
AIP-160 söz diziminde yapılandırılmış bir filtre. Filtre söz dizimi bölümüne bakın. |
query |
has:attachment veya from:suspicious@example.com gibi bir Gmail arama sorgusu. Sorgu, Gmail arama kutusuyla aynı operatörleri kullanır. Gmail'de kullanabileceğiniz arama operatörleri başlıklı makaleyi inceleyin. |
pageSize |
Sayfa başına döndürülecek maksimum mesaj sayısı (1 ile 300 arasında). Bu alanı her zaman açıkça ayarlayın. |
pageToken |
Önceki bir yanıttan alınan nextPageToken değeri. |
Hem filter hem de query değerini ayarladığınızda API yalnızca her ikisiyle de eşleşen mesajları döndürür.
Filtre söz dizimi
filter alanı aşağıdaki alanları destekler. Bunları AND operatörüyle birleştirin. OR ve NOT gibi diğer operatörler desteklenmez.
| Alan | Desteklenen karşılaştırmalar | Değerler |
|---|---|---|
status |
= |
PENDING_TRIAGE, RELEASED veya DENIED. |
direction |
=, != |
INBOUND veya OUTBOUND. |
quarantine_name (veya quarantineName) |
= |
Karantinanın Google Yönetici Konsolu'nda gösterilen görünen adı (ör. "Default"). |
Aşağıdaki örneklerde geçerli filtreler gösterilmektedir:
status = PENDING_TRIAGE
status = PENDING_TRIAGE AND direction = INBOUND
direction != OUTBOUND AND quarantine_name = "Default"
Geçersiz bir filtre, 400 INVALID_ARGUMENT hatası döndürür.
Yanıt
Her iki yöntem de temel meta verilerle birlikte QuarantinedMessage kaynaklarının listesini ve daha fazla sonuç varsa nextPageToken değerini döndürür:
{
"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..."
}
| Alan | Açıklama |
|---|---|
name |
Mesajın kaynak adı. customers.quarantinedMessages kaynağındaki sonraki get, release ve deny çağrılarında kullanın. |
messageId |
Sabit Gmail ileti kimliği. |
messageOwner |
İletinin sahibi olan posta kutusunun e-posta adresi. |
quarantines |
İletiyi tutan karantinaların kaynak adları. Karantinanın görünen adını almak için customers.quarantines kaynağının get yöntemini çağırın. |
receiveTime |
Gmail'in iletiyi aldığı zaman. |
direction |
Kullanıcı iletiyi aldıysa INBOUND, gönderdiyse OUTBOUND. |
state |
PENDING_TRIAGE, RELEASED veya DENIED. |
retentionExpireTime |
Karantina, iletiyi saklamayı bıraktığında. |
triggeredRules |
İletinin karantinaya alınmasına neden olan kurallar. |
unreachable |
Hizmetin karantinaya alınmış iletileri alamadığı hesaplar. Varsa isteği daha sonra tekrar deneyin. |
Sonuçlar arasında gezinme
Eşleşen tüm mesajları almak için:
pageSizeile ilk isteği gönderin.- Yanıt bir
nextPageTokeniçeriyorsa isteği aynı parametrelerle tekrarlayın vepageTokendeğerini bu değere ayarlayın. - Yanıt
nextPageTokeniçermediğinde durdurun.
Aşağıdaki Python örneği, önceliklendirme bekleyen tüm gelen mesajları sayfalar:
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.')