我想完全撤消任何类别标签中内置的Gmail。这是我的尝试。
function removeBuiltInLabels() {
var updatesLabel = GmailApp.getUserLabelByName("updates");
var socialLabel = GmailApp.getUserLabelByName("social");
var forumsLabel = GmailApp.getUserLabelByName("forums");
var promotionsLabel = GmailApp.getUserLabelByName("promotions");
var inboxThreads = GmailApp.search('in:inbox');
for (var i = 0; i < inboxThreads.length; i++) {
updatesLabel.removeFromThreads(inboxThreads[i]);
socialLabel.removeFromThreads(inboxThreads[i]);
forumsLabel.removeFromThreads(inboxThreads[i]);
promotionsLabel.removeFromThreads(inboxThreads[i]);
}
}
但是,这会抛出。...
TypeError:无法调用null的方法“ removeFromThreads”。
即使您可以在Gmail搜索框中成功搜索label:updates
并获得正确的结果,似乎也无法以这种方式访问内置标签。
问题...
如何访问Google Apps脚本中的内置Gmail类别标签并将其从电子邮件/线程/线程中删除?
谢谢。
答案 0 :(得分:3)
“ INBOX”和其他系统标签(例如“ CATEGORY_SOCIAL”)可以使用高级Gmail服务删除。在脚本编辑器中,转到资源->高级Google服务,然后启用Gmail服务。 可以在Gmail API - Managing Labels
中找到有关Gmail中系统标签命名约定的更多详细信息。通过调用线程集合的list()方法来检索标记为“ CATEGORY_SOCIAL”的线程:
var threads = Gmail.Users.Threads.list("me", {labels: ["CATEGORY_SOCIAL"]});
var threads = threads.threads;
var nextPageToken = threads.nextPageToken;
请注意,您将需要存储“ nextPageToken”以遍历整个线程集合。参见this answer。 当获得所有线程ID时,可以对其调用Threads集合的'modify()'方法:
threads.forEach(function(thread){
var resource = {
"addLabelIds": [],
"removeLabelIds":["CATEGORY_SOCIAL"]
};
Gmail.Users.Threads.modify(resource, "me", threadId);
});
如果收件箱中有很多线程,则可能仍需要多次调用'modify()'方法并保存两次调用之间的状态。
答案 1 :(得分:0)
安东的答案很好。我将其标记为已接受,因为它会直接导致我使用的版本。
此功能可让您定义任何有效的gmail搜索以隔离邮件并启用批量删除标签。
function removeLabelsFromMessages(query, labelsToRemove) {
var foundThreads = Gmail.Users.Threads.list('me', {'q': query}).threads
if (foundThreads) {
foundThreads.forEach(function (thread) {
Gmail.Users.Threads.modify({removeLabelIds: labelsToRemove}, 'me', thread.id);
});
}
}
我通过这样的一分钟脚本触发器来调用它。
function ProcessInbox() {
removeLabelsFromMessages(
'label:updates OR label:social OR label:forums OR label:promotions',
['CATEGORY_UPDATES', 'CATEGORY_SOCIAL', 'CATEGORY_FORUMS', 'CATEGORY_PROMOTIONS']
)
<...other_stuff_to_process...>
}