격리된 메일을 검토한 후 Mail Admin Quarantine API를 사용하여 분류 결정을 기록합니다.
- 메일을 해제하여 수신자에게 전송합니다. 수신 메일의 경우 Gmail은 수신자의 편지함으로 메일을 전송합니다. 발신 메일의 경우 Gmail에서 전송합니다.
- 메일을 거부하여 거부합니다. Gmail에서 메일을 삭제하고 전송하지 않습니다.
이 페이지에서는 단일 메일을 전송하거나 거부하는 방법을 설명합니다. 한 번에 여러 메일에 대해 조치를 취하려면 일괄적으로 메일 해제 또는 거부하기를 참고하세요.
기본 요건
- API 설정의 단계를 완료했습니다.
- 관리자 스팸 격리 권한이 있는 관리자를 가장하고
https://www.googleapis.com/auth/gmail.admin.quarantine범위를 포함하는 액세스 토큰입니다. 읽기 전용 범위로는 충분하지 않습니다. 도메인 전체 위임으로 승인을 참조하세요. PENDING_TRIAGE상태의 스팸으로 분류된 메일의 리소스 이름입니다. 이 이름은 스팸으로 분류된 메일 나열 및 검색에서 가져옵니다.
메시지 해제
메시지를 해제하려면 빈 JSON 본문이 있는 메시지의 리소스 이름에서 customers.quarantinedMessages 리소스의 :release 커스텀 메서드에 POST 요청을 전송합니다.
POST https://mailadminquarantine.googleapis.com/v1/customers/CUSTOMER_ID/quarantinedMessages/MESSAGE_OWNER:MESSAGE_ID:release
Authorization: Bearer ACCESS_TOKEN
Content-Type: application/json
{}
응답에는 message 필드에 업데이트된 메시지가 포함되며 state는 RELEASED로 설정됩니다.
{
"message": {
"name": "customers/01abc23de/quarantinedMessages/user@example.com:18d3ef45a8b2c1d0",
"messageId": "18d3ef45a8b2c1d0",
"messageOwner": "user@example.com",
"state": "RELEASED"
}
}
메일 거부
메시지를 거부하려면 빈 JSON 본문이 있는 메시지의 리소스 이름에 있는 customers.quarantinedMessages 리소스의 :deny 커스텀 메서드에 POST 요청을 전송합니다.
POST https://mailadminquarantine.googleapis.com/v1/customers/CUSTOMER_ID/quarantinedMessages/MESSAGE_OWNER:MESSAGE_ID:deny
Authorization: Bearer ACCESS_TOKEN
Content-Type: application/json
{}
응답에는 message 필드에 업데이트된 메시지가 포함되며 state는 DENIED로 설정됩니다.
{
"message": {
"name": "customers/01abc23de/quarantinedMessages/user@example.com:18d3ef45a8b2c1d0",
"messageId": "18d3ef45a8b2c1d0",
"messageOwner": "user@example.com",
"state": "DENIED"
}
}
예: 대기 중인 메시지 분류
다음 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',
}
# 1. Search for messages pending triage.
search_url = f'{BASE_URL}/customers/{CUSTOMER_ID}/quarantinedMessages:search'
search_body = {'filter': 'status = PENDING_TRIAGE', 'pageSize': 10}
response = requests.post(search_url, headers=headers, json=search_body)
response.raise_for_status()
for message in response.json().get('quarantinedMessages', []):
name = message['name']
# 2. Get the parsed message content.
details = requests.get(
f'{BASE_URL}/{name}?view=MESSAGE_VIEW_DETAILS', headers=headers)
details.raise_for_status()
subject = details.json().get('content', {}).get('subject', '')
# 3. Release or deny the message.
action = 'deny' if 'malicious' in subject.lower() else 'release'
result = requests.post(f'{BASE_URL}/{name}:{action}', headers=headers,
json={})
result.raise_for_status()
print(f"{name}: {result.json()['message']['state']}")
오류 응답
| HTTP 상태 | 원인 |
|---|---|
400 INVALID_ARGUMENT |
리소스 이름 형식이 잘못되었습니다. |
403 PERMISSION_DENIED |
명의를 도용한 관리자에게 메일이 보관된 스팸 격리 저장소에 대한 액세스 권한이 없거나 토큰에 https://www.googleapis.com/auth/gmail.admin.quarantine 범위가 없습니다. |
404 NOT_FOUND |
해당 리소스 이름의 스팸 격리 메시지가 없습니다. 메일이 스팸 격리 저장소에서 만료되었을 수 있습니다. |
429 RESOURCE_EXHAUSTED |
Google Cloud 프로젝트가 쓰기 요청 할당량을 초과했습니다. Mail Admin Quarantine API 사용 할당량을 참고하세요. |