解決錯誤

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

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

Gmail 應用程式應會擷取並處理使用 REST API 時可能遇到的所有錯誤。本指南提供相關操作說明,協助您解決特定 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) 都會共用這些限制。如果超過這些限制,系統會傳回 HTTP 429「要求數過多:超過使用者速率限制 (郵件傳送)」錯誤,並提供重試時間。如果超過每日上限,系統可能會在數小時內拒絕要求,直到配額重置為止。

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

頻寬限制

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

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

並行要求

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

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

500、502、503、504 錯誤

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

以下列出 5xx 錯誤:

  • 500 後端錯誤
  • 502 閘道錯誤
  • 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 個要求的批次。如要瞭解如何提出批次要求,請參閱「批次要求」一文。