Trang này giải thích cách tìm thư được lưu giữ trong khu vực cách ly của quản trị viên Google Workspace bằng Mail Admin Quarantine API.
API này cung cấp hai phương thức trên tài nguyên customers.quarantinedMessages:
- Phương thức
listtrả về các thư bị cách ly mà không cần lọc. Hãy sử dụng nút này để xem từng trang trong danh sách thư bị cách ly. - Phương thức
searchthu hẹp kết quả bằng bộ lọc có cấu trúc, cụm từ tìm kiếm trong Gmail hoặc cả hai. Sử dụng tham số này cho quy trình phân loại, chẳng hạn như chỉ truy xuất những thư đến đang chờ xem xét.
Cả hai phương thức đều trả về tin nhắn trong 30 ngày qua và đều trả về cùng một siêu dữ liệu cơ bản cho mỗi tin nhắn. Để truy xuất tiêu đề, nội dung, tệp đính kèm hoặc thư thô, hãy xem phần Lấy thông tin chi tiết về thư.
Điều kiện tiên quyết
- Bạn đã hoàn tất các bước trong phần Thiết lập API.
- Mã truy cập mạo danh quản trị viên có đặc quyền cách ly của quản trị viên và bao gồm phạm vi
https://www.googleapis.com/auth/gmail.admin.quarantinehoặchttps://www.googleapis.com/auth/gmail.admin.quarantine.readonly. Xem bài viết Uỷ quyền bằng tính năng uỷ quyền trên toàn miền.
Liệt kê thư bị cách ly
Để liệt kê các thư bị cách ly, hãy gửi yêu cầu GET đến phương thức list trên tài nguyên customers.quarantinedMessages của khách hàng:
GET https://mailadminquarantine.googleapis.com/v1/customers/CUSTOMER_ID/quarantinedMessages?pageSize=50
Authorization: Bearer ACCESS_TOKEN
Thay thế CUSTOMER_ID bằng mã khách hàng của bạn.
Phương thức list chấp nhận các tham số truy vấn sau:
| Tham số | Mô tả |
|---|---|
pageSize |
Số lượng tin nhắn tối đa được trả về trên mỗi trang, từ 1 đến 300. Luôn đặt tham số này một cách rõ ràng. |
pageToken |
Giá trị nextPageToken từ phản hồi trước đó. Sử dụng mã này để truy xuất trang tiếp theo. |
Tìm kiếm thư bị cách ly
Để tìm kiếm thư bị cách ly, hãy gửi yêu cầu POST đến phương thức tuỳ chỉnh :search trên tài nguyên customers.quarantinedMessages có nội dung 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
}
Nội dung yêu cầu chấp nhận các trường sau. Tất cả các trường đều không bắt buộc:
| Trường | Mô tả |
|---|---|
filter |
Bộ lọc có cấu trúc theo cú pháp AIP-160. Xem Cú pháp bộ lọc. |
query |
Cụm từ tìm kiếm trong Gmail, chẳng hạn như has:attachment hoặc from:suspicious@example.com. Cụm từ tìm kiếm sử dụng các toán tử giống như hộp tìm kiếm của Gmail. Xem Toán tử tìm kiếm bạn có thể dùng trong Gmail. |
pageSize |
Số lượng tin nhắn tối đa được trả về trên mỗi trang, từ 1 đến 300. Luôn đặt trường này một cách rõ ràng. |
pageToken |
Giá trị nextPageToken từ phản hồi trước đó. |
Khi bạn đặt cả filter và query, API chỉ trả về những thông báo khớp với cả hai.
Cú pháp bộ lọc
Trường filter hỗ trợ các trường sau. Kết hợp các từ khoá này bằng toán tử AND. Các toán tử khác, chẳng hạn như OR và NOT, không được hỗ trợ.
| Trường | Các phép so sánh được hỗ trợ | Giá trị |
|---|---|---|
status |
= |
PENDING_TRIAGE, RELEASED hoặc DENIED. |
direction |
=, != |
INBOUND hoặc OUTBOUND. |
quarantine_name (hoặc quarantineName) |
= |
Tên hiển thị của một khu vực cách ly như trong Bảng điều khiển dành cho quản trị viên của Google, ví dụ: "Default". |
Các ví dụ sau đây cho thấy các bộ lọc hợp lệ:
status = PENDING_TRIAGE
status = PENDING_TRIAGE AND direction = INBOUND
direction != OUTBOUND AND quarantine_name = "Default"
Bộ lọc không hợp lệ sẽ trả về lỗi 400 INVALID_ARGUMENT.
Phản hồi
Cả hai phương thức đều trả về danh sách tài nguyên QuarantinedMessage có siêu dữ liệu cơ bản, cộng với nextPageToken nếu có thêm kết quả:
{
"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..."
}
| Trường | Mô tả |
|---|---|
name |
Tên tài nguyên của thông báo. Sử dụng mã này trong các lệnh gọi get, release và deny tiếp theo trên tài nguyên customers.quarantinedMessages. |
messageId |
Mã nhận dạng thư Gmail không thể thay đổi. |
messageOwner |
Địa chỉ email của hộp thư sở hữu thư. |
quarantines |
Tên tài nguyên của các vùng cách ly chứa thư. Gọi phương thức get của tài nguyên customers.quarantines để lấy tên hiển thị của thư mục cách ly. |
receiveTime |
Thời điểm Gmail nhận được thư. |
direction |
INBOUND nếu người dùng nhận được tin nhắn hoặc OUTBOUND nếu người dùng gửi tin nhắn. |
state |
PENDING_TRIAGE, RELEASED hoặc DENIED. |
retentionExpireTime |
Thời điểm khu vực cách ly ngừng giữ lại thư. |
triggeredRules |
Quy tắc khiến thư bị cách ly. |
unreachable |
Những tài khoản mà dịch vụ không thể truy xuất thư bị cách ly. Nếu có, hãy thử lại yêu cầu sau. |
Xem kết quả theo trang
Cách truy xuất tất cả thư phù hợp:
- Gửi yêu cầu đầu tiên bằng
pageSize. - Nếu phản hồi chứa
nextPageToken, hãy lặp lại yêu cầu có cùng tham số và đặtpageTokenthành giá trị đó. - Dừng khi phản hồi không chứa
nextPageToken.
Ví dụ về Python sau đây sẽ phân trang tất cả các thư đến đang chờ phân loại:
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.')