本頁面說明如何使用 Mail Admin Quarantine API,找出 Google Workspace 管理員隔離區中保留的郵件。
API 在 customers.quarantinedMessages 資源上提供兩種方法:
list方法會傳回隔離郵件,不進行任何篩選。可用來翻閱隔離區中的所有內容。search方法會使用結構化篩選器、Gmail 搜尋查詢或兩者,縮小結果範圍。可用於分類工作流程,例如只擷取待審查的傳入郵件。
這兩種方法都會傳回過去 30 天內的訊息,且每則訊息都會傳回相同的基本中繼資料。如要擷取標頭、內文、附件或原始郵件,請參閱「取得郵件詳細資料」。
必要條件
- 您已完成「設定 API」中的步驟。
- 存取權杖,可模擬具備管理員隔離權限的管理員,並包含
https://www.googleapis.com/auth/gmail.admin.quarantine或https://www.googleapis.com/auth/gmail.admin.quarantine.readonly範圍。請參閱「使用全網域委派功能進行授權」。
列出遭到隔離的郵件
如要列出隔離郵件,請對客戶的 customers.quarantinedMessages 資源,傳送 GET 要求至 list 方法:
GET https://mailadminquarantine.googleapis.com/v1/customers/CUSTOMER_ID/quarantinedMessages?pageSize=50
Authorization: Bearer ACCESS_TOKEN
將 CUSTOMER_ID 替換為您的客戶 ID。
list 方法接受下列查詢參數:
| 參數 | 說明 |
|---|---|
pageSize |
每頁傳回的訊息數量上限,範圍為 1 到 300。請務必明確設定這項參數。 |
pageToken |
先前回應中的 nextPageToken 值。使用這個權杖即可擷取下一頁。 |
搜尋遭隔離的郵件
如要搜尋隔離郵件,請將 POST 要求傳送至 customers.quarantinedMessages 資源的 :search 自訂方法,並附上 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
}
要求主體接受下列欄位。所有欄位均為選填:
| 欄位 | 說明 |
|---|---|
filter |
採用 AIP-160 語法的結構化篩選器。請參閱「篩選器語法」。 |
query |
Gmail 搜尋查詢,例如 has:attachment 或 from:suspicious@example.com。查詢使用的運算子與 Gmail 搜尋框相同。請參閱「可搭配 Gmail 使用的搜尋運算子」。 |
pageSize |
每頁傳回的訊息數量上限,範圍為 1 到 300。請務必明確設定這個欄位。 |
pageToken |
先前回應中的 nextPageToken 值。 |
如果同時設定 filter 和 query,API 只會傳回符合這兩項條件的訊息。
篩選器語法
filter 欄位支援下列欄位。請使用 AND 運算子合併。不支援 OR 和 NOT 等其他運算子。
| 欄位 | 支援的比較項目 | 值 |
|---|---|---|
status |
= |
PENDING_TRIAGE、RELEASED 或 DENIED。 |
direction |
=、!= |
INBOUND 或 OUTBOUND。 |
quarantine_name (或 quarantineName) |
= |
Google 管理控制台中顯示的隔離區顯示名稱,例如 "Default"。 |
以下是有效篩選器的範例:
status = PENDING_TRIAGE
status = PENDING_TRIAGE AND direction = INBOUND
direction != OUTBOUND AND quarantine_name = "Default"
如果篩選器無效,系統會傳回 400 INVALID_ARGUMENT 錯誤。
回應
這兩種方法都會傳回 QuarantinedMessage 資源清單,其中包含基本中繼資料,如果還有更多結果,則會傳回 nextPageToken:
{
"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..."
}
| 欄位 | 說明 |
|---|---|
name |
訊息的資源名稱。在 customers.quarantinedMessages 資源上後續呼叫 get、release 和 deny 時,請使用這個值。 |
messageId |
不可變更的 Gmail 郵件 ID。 |
messageOwner |
擁有郵件的信箱電子郵件地址。 |
quarantines |
保留郵件的隔離區資源名稱。呼叫 customers.quarantines 資源的 get 方法,取得隔離區的顯示名稱。 |
receiveTime |
Gmail 收到郵件的時間。 |
direction |
INBOUND (如果使用者收到郵件) 或 OUTBOUND (如果使用者傳送郵件)。 |
state |
PENDING_TRIAGE、RELEASED 或 DENIED。 |
retentionExpireTime |
隔離區停止保留郵件的時間。 |
triggeredRules |
導致郵件遭到隔離的規則。 |
unreachable |
服務無法擷取隔離郵件的帳戶。如果出現,請稍後再重試要求。 |
逐頁瀏覽結果
如要擷取所有相符的訊息,請按照下列步驟操作:
- 使用
pageSize傳送第一個要求。 - 如果回應包含
nextPageToken,請使用相同參數重複要求,並將pageToken設為該值。 - 如果回應不含
nextPageToken,則停止。
下列 Python 範例會逐頁瀏覽所有待分類的內送訊息:
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.')