메시지 해제 또는 거부하기

격리된 메일을 검토한 후 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 사용 할당량을 참고하세요.

다음 단계