如何通过Gmail API将新建过滤器置于现有过滤器底部?
解决Gmail API创建过滤器置于底部的问题
首先明确:Gmail API的users.settings.filters.create接口不支持直接指定创建时的位置,你代码里的position: 'LAST'是无效字段——API文档中不存在这个参数,默认创建的过滤器会排在所有现有过滤器的最前面。
要实现将新过滤器置于底部,需要分两步操作:
第一步:修正创建过滤器的代码
先去掉无效的position字段,同时修正代码里的语法错误(criteria是对象而非数组,属性末尾缺逗号):
// 创建新过滤器 const newFilter = await gmail.users.settings.filters.create({ userId: email, auth: oAuth2Client, resource: { action: { addLabelIds: [response.data.id], removeLabelIds: ["INBOX"] }, criteria: { query: "label:inbox", excludeChats: true, negatedQuery: responder.deliveryExceptions } } });
第二步:调整新过滤器的位置到最后
创建完成后,获取所有过滤器列表,将新过滤器的position.index设为当前最大索引值+1(Gmail过滤器按index从小到大执行,数值越大越靠后):
// 获取所有过滤器列表 const filtersList = await gmail.users.settings.filters.list({ userId: email, auth: oAuth2Client }); const allFilters = filtersList.data.filters; const newFilterId = newFilter.data.id; // 计算当前最大的position索引 let maxIndex = 0; allFilters.forEach(filter => { if (filter.position?.index && filter.position.index > maxIndex) { maxIndex = filter.position.index; } }); // 更新新过滤器的位置到最后 await gmail.users.settings.filters.update({ userId: email, auth: oAuth2Client, id: newFilterId, resource: { position: { index: maxIndex + 1 } } });
补充说明
- 如果现有过滤器都未设置
position,它们的默认索引为0,此时将新过滤器的index设为1即可排到最后 - 过滤器的执行顺序严格按照
position.index从小到大,数值越大越晚执行(也就是越靠底部)
内容的提问来源于stack exchange,提问作者Haseeb Zahid
相关产品推荐
相关产品推荐

