使用 Google Apps 脚本,如何从电子邮件中删除内置的 Gmail 类别标签?
Using Google Apps Script, how do you remove built in Gmail category labels from an email?
我想完全撤消任何内置类别标签的 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: Cannot call method "removeFromThreads" of null.
虽然您可以在 Gmail 搜索框中成功搜索 label:updates
并获得正确结果,但您似乎无法通过这种方式访问内置标签。
问题...
如何在 Google Apps 脚本中访问内置的 Gmail 类别标签并从 email/thread/threads 中删除它们?
谢谢。
'INBOX' 和 'CATEGORY_SOCIAL' 等其他系统标签可以使用高级 Gmail 服务删除。在脚本编辑器中,转到资源 -> 高级 Google 服务并启用 Gmail 服务。
有关 Gmail 中系统标签命名约定的更多详细信息,请参见此处 Gmail API - Managing Labels
通过调用线程集合的 list() 方法检索标有 'CATEGORY_SOCIAL' 的线程:
var threads = Gmail.Users.Threads.list("me", {labels: ["CATEGORY_SOCIAL"]});
var threads = threads.threads;
var nextPageToken = threads.nextPageToken;
请注意,您将需要存储 'nextPageToken' 以迭代整个线程集合。参见 。
当你得到所有的线程id后,你可以在它们上面调用Threads集合的'modify()'方法:
threads.forEach(function(thread){
var resource = {
"addLabelIds": [],
"removeLabelIds":["CATEGORY_SOCIAL"]
};
Gmail.Users.Threads.modify(resource, "me", threadId);
});
如果您的收件箱中有很多线程,您可能仍需要多次调用 'modify()' 方法并在调用之间保存状态。
Anton 的回答很棒。我将其标记为已接受,因为它直接指向我正在使用的版本。
此功能可让您定义任何有效的 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...>
}
我想完全撤消任何内置类别标签的 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: Cannot call method "removeFromThreads" of null.
虽然您可以在 Gmail 搜索框中成功搜索 label:updates
并获得正确结果,但您似乎无法通过这种方式访问内置标签。
问题...
如何在 Google Apps 脚本中访问内置的 Gmail 类别标签并从 email/thread/threads 中删除它们?
谢谢。
'INBOX' 和 'CATEGORY_SOCIAL' 等其他系统标签可以使用高级 Gmail 服务删除。在脚本编辑器中,转到资源 -> 高级 Google 服务并启用 Gmail 服务。 有关 Gmail 中系统标签命名约定的更多详细信息,请参见此处 Gmail API - Managing Labels
通过调用线程集合的 list() 方法检索标有 'CATEGORY_SOCIAL' 的线程:
var threads = Gmail.Users.Threads.list("me", {labels: ["CATEGORY_SOCIAL"]});
var threads = threads.threads;
var nextPageToken = threads.nextPageToken;
请注意,您将需要存储 'nextPageToken' 以迭代整个线程集合。参见
threads.forEach(function(thread){
var resource = {
"addLabelIds": [],
"removeLabelIds":["CATEGORY_SOCIAL"]
};
Gmail.Users.Threads.modify(resource, "me", threadId);
});
如果您的收件箱中有很多线程,您可能仍需要多次调用 'modify()' 方法并在调用之间保存状态。
Anton 的回答很棒。我将其标记为已接受,因为它直接指向我正在使用的版本。
此功能可让您定义任何有效的 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...>
}