Google Scripts API自动转发配置未生效,域管理员求助排查
排查Gmail自动转发设置的HTTP请求问题
你遇到的核心问题是请求体参数没有正确传递——在UrlFetchApp.fetch()的配置里,你直接把enabled、emailAddress这些转发配置参数和headers、method平级放置了,但这些参数属于请求体内容,需要单独封装成JSON格式的payload传递,UrlFetchApp不会自动识别顶层的这些参数作为请求体。这就导致Gmail API根本没收到你要设置的转发规则,所以默认返回{"enabled": false},转发自然无法生效。
修正后的代码
function setupForwarding() { var service = getOAuthService(); service.reset(); try { if (service.hasAccess()) { var headers = { Authorization: 'Bearer ' + service.getAccessToken(), 'Content-Type': 'application/json' // 必须指定请求体为JSON格式 }; var url = "https://www.googleapis.com/gmail/v1/users/apitest@example.com/settings/autoForwarding"; // 把转发规则封装成对象,再转成JSON字符串作为请求体 var payload = JSON.stringify({ enabled: true, emailAddress: 'newaddress@example.com', disposition: 'trash' }); var response = UrlFetchApp.fetch(url, { headers: headers, method: 'put', payload: payload // 正确传递请求体内容 }); Logger.log(response.getContentText()); } } catch (e) { Logger.log(e.message); } }
关键修改点说明
- 添加
Content-Type: application/json请求头:明确告诉Gmail API你发送的是JSON格式的请求体,这是API接收参数的必要前提 - 单独封装
payload:将转发配置对象通过JSON.stringify()转换成JSON字符串,作为请求体传递,而不是直接把配置参数放在options的顶层 - 规范参数命名:把原代码里的
header改为headers(虽然不影响功能,但更符合常规命名习惯)
修改完成后,你可以再次调用这个函数,之后用GET请求访问同一个接口,确认返回的JSON数据里enabled是否为true,emailAddress是否正确匹配目标地址,以此验证转发规则是否生效。
内容的提问来源于stack exchange,提问作者OzzieAntipode
相关产品推荐
相关产品推荐

