You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Workspace管理员通过Gmail API创建标签遇400错误求助

解决Gmail API创建标签时的400 Invalid Request错误

你的代码存在两个关键问题,导致了400参数无效错误:

  1. 请求方法错误:创建标签需要使用POST请求,但UrlFetchApp.fetch默认使用GET方法,GET请求携带payload本身不符合API要求。
  2. Payload格式错误:Gmail API要求请求体为JSON格式,但你直接传入了JavaScript对象且未指定contentType,UrlFetchApp会自动将其编码为表单格式(application/x-www-form-urlencoded),与API格式要求不匹配。

修正后的代码

/**
 * Adds a label to the account
 */
function addLabel(){

  const USER_EMAIL = "my.test@domain.org"; // Set the user to be impersonated

  var service = getService_(USER_EMAIL);
  if (service.hasAccess()) {
    var url = 'https://gmail.googleapis.com/gmail/v1/users/me/labels';
    var response = UrlFetchApp.fetch(url, {
      method: 'post', // 显式指定POST方法
      headers: {
        Authorization: 'Bearer ' + service.getAccessToken()
      },
      contentType: 'application/json', // 指定请求体为JSON格式
      payload: JSON.stringify({ // 将对象转为JSON字符串
        "name": "New Label",
        "messageListVisibility": "show",
        "labelListVisibility": "labelShow"
      })
    });
    var result = JSON.parse(response.getContentText());
    Logger.log('创建的标签信息:', result);
  } else {
    Logger.log(service.getLastError());
  }
  return "";
}

/**
 * Configures the mail service for the user to be impersonated
 */
function getService_(userEmail) {
  return OAuth2.createService('GMail:' + userEmail)
      .setTokenUrl('https://oauth2.googleapis.com/token')
      .setPrivateKey(PRIVATE_KEY)
      .setIssuer(CLIENT_EMAIL)
      .setSubject(userEmail)
      .setPropertyStore(PropertiesService.getScriptProperties())
      .setScope('https://mail.google.com/');
}

额外说明

  • 把USER_EMAIL改为常量并作为参数传入getService_函数,让代码更规范。
  • 添加了创建后标签信息的日志输出,方便调试。
  • 你已经确认权限配置无误(能读取和移除标签),因此无需调整域范围委派的权限设置。

内容的提问来源于stack exchange,提问作者engeeaitch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 18:42:40