解決錯誤

Gmail API 會傳回兩層的錯誤資訊:

  • 標頭中的 HTTP 錯誤代碼和訊息。
  • 回應主體中的 JSON 物件,內含可協助您判斷如何處理錯誤的其他詳細資料。

使用 REST API 時,Gmail 應用程式應會擷取並處理您遇到的所有錯誤。本指南提供操作說明,協助您解決特定 Gmail API 錯誤。

HTTP 狀態碼摘要

錯誤代碼 說明
200 - OK 要求成功 (這是成功 HTTP 要求的標準回應)。
400 - Bad Request 發生用戶端錯誤,因此伺服器無法完成要求。
401 - Unauthorized 要求中包含無效的憑證。
403 - Forbidden 伺服器已收到並瞭解要求,但使用者沒有執行要求的權限。
404 - Not Found 找不到要求的資源。
429 - Too Many Requests 對 API 發出的要求過多。
500, 502, 503, 504 - Server Errors 處理要求時發生未預期的錯誤。

400 錯誤

這類錯誤表示要求有誤,通常是因為缺少必要參數。

badRequest

如果程式碼發生下列任一問題,就可能導致這項錯誤:

  • 缺少必要欄位或參數。
  • 提供的欄位值或組合無效。
  • 附件無效。

以下 JSON 範例代表這項錯誤:

{
  "error": {
    "code": 400,
    "errors": [
      {
        "domain": "global",
        "location": "orderBy",
        "locationType": "parameter",
        "message": "Sorting is not supported for queries with fullText terms. Results are always in descending relevance order.",
        "reason": "badRequest"
      }
    ],
    "message": "Sorting is not supported for queries with fullText terms. Results are always in descending relevance order."
  }
}

如要修正這項錯誤,請檢查 message 欄位,並據此調整程式碼。

401 錯誤

這類錯誤表示要求未包含有效存取權杖。

authError

如果使用的存取權杖過期或無效,就會發生這個錯誤。如果缺少所要求範圍的授權,也可能導致這項錯誤。以下 JSON 範例代表這項錯誤:

{
  "error": {
    "errors": [
      {
        "domain": "global",
        "reason": "authError",
        "message": "Invalid Credentials",
        "locationType": "header",
        "location": "Authorization",
      }
    ],
    "code": 401,
    "message": "Invalid Credentials"
  }
}

如要修正這項錯誤,請使用長期有效的更新權杖更新存取權杖。 如果您使用用戶端程式庫,系統會自動處理權杖重新整理作業。如果失敗,請按照「瞭解驗證和授權」一文所述,引導使用者完成 OAuth 流程。

如要進一步瞭解 Gmail 限制,請參閱「使用限制」。

403 錯誤

如果超出用量限制或使用者沒有適當權限,就會發生這些錯誤。如要判斷原因,請評估傳回 JSON 的 reason 欄位。發生這項錯誤的原因如下:

  • 應用程式無法在已驗證使用者的網域中使用。
  • 專案超出每日上限。
  • 使用者超出速率限制。
  • 專案超出速率限制。

詳情請參閱「用量限制」。

dailyLimitExceeded

如果專案達到 API 限制,就會發生這個錯誤。以下 JSON 範例代表這項錯誤:

{
  "error": {
    "errors": [
      {
        "domain": "usageLimits",
        "reason": "dailyLimitExceeded",
        "message": "Daily Limit Exceeded"
      }
    ],
    "code": 403,
    "message": "Daily Limit Exceeded"
  }
}

如果應用程式擁有者設定配額上限,限制特定資源的使用量,就會發生這個錯誤。如要修正這項錯誤,請提高 Google Cloud 專案的配額。詳情請參閱「管理配額限制」。

domainPolicy

如果使用者網域的政策不允許應用程式存取 Gmail,就會發生這個錯誤。以下是這項錯誤的 JSON 表示法:

{
  "error": {
    "errors": [
      {
        "domain": "global",
        "reason": "domainPolicy",
        "message": "The domain administrators have disabled Gmail apps."
      }
    ],
    "code": 403,
    "message": "The domain administrators have disabled Gmail apps."
  }
}

如要修正這項錯誤,請嘗試下列方法:

  1. 告知使用者網域不允許應用程式存取 Gmail。
  2. 請使用者與網域管理員聯絡,要求授予應用程式存取權。

rateLimitExceeded

這個錯誤表示使用者已達到 Gmail API 的要求比率上限。這項限制會因要求類型而異。以下 JSON 範例代表這項錯誤:

{
  "error": {
  "errors": [
    {
    "domain": "usageLimits",
    "message": "Rate Limit Exceeded",
    "reason": "rateLimitExceeded",
    }
  ],
  "code": 403,
  "message": "Rate Limit Exceeded"
  }
}

如要修正這項錯誤,請嘗試下列方法:

userRateLimitExceeded

如果要求達到個別使用者的限制,就會發生這個錯誤。以下 JSON 範例代表這項錯誤:

{
  "error": {
  "errors": [
    {
    "domain": "usageLimits",
    "reason": "userRateLimitExceeded",
    "message": "User Rate Limit Exceeded"
    }
  ],
  "code": 403,
  "message": "User Rate Limit Exceeded"
  }
}

如要修正這項錯誤,請嘗試最佳化應用程式程式碼,減少要求數量,或使用指數輪詢重試要求。

429 錯誤

如果超過每日使用者限制 (包括郵件傳送限制)、頻寬限制或每位使用者的並行要求限制,就可能發生 429「要求過多」錯誤。以下是各項限制的相關資訊。不過,您可以重試失敗的要求,或將處理作業分散到多個 Gmail 帳戶,解決各項限制。

您無法提高每位使用者的限制。如要進一步瞭解限制,請參閱「用量限制」一節。

郵件傳送限制

Gmail API 會強制執行標準的每日郵件傳送限制。付費 Google Workspace 使用者和試用 gmail.com 使用者的限制不同。如要瞭解這些限制,請參閱「Google Workspace 的 Gmail 郵件傳送限制」。

這些限制適用於每位使用者,且所有使用者用戶端 (無論是 API 用戶端、內建或網頁用戶端,還是 SMTP MSA) 都會共用這些限制。如果超過這些限制,API 會傳回 HTTP 429「要求數過多:超出使用者速率限制 (郵件傳送)」錯誤,並提供重試時間。超過每日上限可能會導致伺服器在數小時內無法接受要求,並顯示下列錯誤訊息。

郵件傳送管道相當複雜,使用者一旦超過配額,API 可能要過幾分鐘才會開始傳回 429 錯誤回應。請勿假設 200 回應表示電子郵件已順利傳送。

頻寬限制

API 的上傳和下載頻寬限制與 IMAP 相同,但彼此獨立。使用者所有 Gmail API 用戶端共用這些限制。

使用者通常只會在特殊或濫用情況下遇到這些限制。如果超出這些限制,API 會傳回 HTTP 429「Too many requests: User-rate limit exceeded」(要求過多:超出使用者速率限制) 錯誤,並提供重試時間。如果超過每日上限,伺服器可能要過幾小時才會接受要求,期間可能會發生這些錯誤。

並行要求

Gmail API 會強制執行個別使用者的並行要求限制 (除了個別使用者的速率限制外)。所有存取使用者的 Gmail API 用戶端都會共用這項限制,確保沒有任何 API 用戶端會造成 Gmail 使用者信箱或後端伺服器過載。

如果為單一使用者提出大量並行要求,或傳送包含大量要求的批次,就可能觸發這項錯誤。如果大量獨立 API 用戶端同時存取 Gmail 使用者信箱,也可能觸發這項錯誤。如果超出這項限制,API 會傳回 HTTP 429「Too many requests: Too many concurrent requests for user」錯誤。

500、502、503、504 錯誤

處理要求時發生未預期的伺服器錯誤,就會出現這些錯誤。造成這些錯誤的原因有很多,包括要求時間與其他要求重疊,或是要求執行不支援的動作,例如嘗試更新 Google 協作平台中單一網頁的權限,而非整個網站。

以下列出 5xx 錯誤:

  • 500 後端錯誤
  • 502 Bad gateway
  • 503 無法提供服務
  • 504 閘道逾時

backendError

處理要求時發生未預期的錯誤,就會出現這個錯誤。 以下 JSON 範例代表這項錯誤:

{
  "error": {
  "errors": [
    {
    "domain": "global",
    "reason": "backendError",
    "message": "Backend Error",
    }
  ],
  "code": 500,
  "message": "Backend Error"
  }
}

如要修正這項錯誤,請使用指數輪詢重試要求。

重新嘗試提出要求以解決要求失敗的錯誤

您可以定期重試失敗的要求,並逐漸增加重試次數,以處理與速率限制、網路容量或回應時間相關的錯誤。舉例來說,您可能會在要求失敗後重試一次,然後在兩秒後重試一次,接著在四秒後重試一次。這種方法稱為「指數輪詢」,可提升頻寬使用效率,並在並行環境中盡量提高要求總處理量。

錯誤發生後,至少要過一秒才能開始重試。

管理配額限制

如要查看或變更專案的用量限制,或是想申請更多配額,請進行以下步驟:

  1. 確認您的專案已設有帳單帳戶。如果沒有,請先建立一個。
  2. 開啟 API 控制台並前往 API 程式庫「已啟用的 API」頁面,從清單中選取 API。
  3. 如要查看及變更配額相關設定,請點選「配額」。如要查看用量統計資料,請點選「用量」

詳情請參閱「查看及管理配額」。

批次要求

批次要求可以提升效能,但如果批次大小過大,可能會觸發速率限制。請勿傳送超過 50 個要求的批次。如要瞭解如何批次處理要求,請參閱「批次要求」。