是否可以使用 Google Apps 脚本创建 gmail 标签并选择其颜色?
Is it possible to create a gmail label and choose its color using Google Apps Script?
我正在尝试使用 Google Apps 脚本为我的 Gmail 收件箱创建一个自动标签器。
在某些情况下,我的大部分电子邮件都有截止日期,我将在下面 post 编写的代码基本上会解析电子邮件,找到 #DL 并创建一个名称为截止日期的标签。我还希望标签具有特定颜色,具体取决于该截止日期的剩余时间。
不幸的是,我发现 GAS API 无法显示 changing/creating 带有颜色的标签,但我还发现,通过高级 Google 服务,可以定义标签的颜色。接受条款和条件并启用高级 Google 服务时,自动完成显示选项:
Gmail.newLabelColor()
是否可以使用它来使用 GAS 创建具有不同颜色的新标签,如果可以,我如何将其与下面的代码连接起来?
var filters = [
{ match: /[\n\r][ \t]*#DL:[ \t]*([^\n\r]*)/, archive: false },
];
var from = [];
function labeler() {
var batchSize = 10;
var labelCache = {};
var query = "in:anywhere";
var threads = GmailApp.search(query, 0, batchSize);
GmailApp.getMessagesForThreads(threads);
var findOrCreateLabel = function(name) {
if (labelCache[name] === undefined) {
labelCache[name] = GmailApp.getUserLabelByName(name) || GmailApp.createLabel(name);
}
//GmailApp.createLabel(name);
//createLabelByGmailApi(name);
return labelCache[name];
}
var applyLabel = function(name, thread){
var label = null;
var labelName = "";
name.split('&').forEach(function(labelPart, i) {
labelName = labelName + (i===0 ? "" : "&") + labelPart.trim();
label = findOrCreateLabel(labelName);
});
thread.addLabel(label);
}
threads.forEach(function(thread) {
var messages = thread.getMessages();
if (messages == null) return;
var message = messages[messages.length - 1];
var body = message.getRawContent();
var archive = true;
filters.forEach(function(filter){
var matches = filter.match.exec(body);
if (matches !== null) {
var label = filter.name || matches[1];
var data = datestd(label);
var cor = datecalc(data);
label = "Datas/" + data;
if (label !== undefined) applyLabel(label, thread);
if (filter.archive !== undefined && !filter.archive) archive = false;
}
});
if (archive) thread.moveToArchive();
});
}
function createLabelByGmailApi(name,color) {
var label = GmailApp.getUserLabelByName(name);
if (label) return label;
var textColor = "#ffffff";
if (color=='red'){
var backgroundColor = "#ac2b16";
} else if (color=='yellow'){
var backgroundColor = "#fad165";
} else if (color=='green'){
var backgroundColor = "#076239";
} else {
var backgroundColor = "#41236d";
}
var userId = "me";
var resource = Gmail.newLabel();
resource.labelListVisibility = "labelShow";
resource.messageListVisibility = "show";
resource.name = name;
var labelColor = Gmail.newLabelColor();
labelColor.textColor = textColor;
labelColor.backgroundColor = backgroundColor;
resource.color = labelColor;
Gmail.Users.Labels.create(resource, userId);
return GmailApp.getUserLabelByName(name);
}
抱歉,如果这个问题看起来很愚蠢,或者如果它真的很容易做,我对此并不是很有经验,并且通过搜索找不到办法。
对于问题 1:
Is it possible to use this to create a new label with a different color using GAS?
这个答案是肯定的。
- 您想用该颜色创建新标签。
- 您想使用带有 Google Apps 脚本的 Gmail API 来实现此目的。
- 您已经在高级 Google 服务中启用了 Gmail API。
如果我的理解是正确的,这个示例脚本和修改怎么样?请将此视为几个答案之一。
在这个示例脚本中,Users.labels: Gmail API 的创建方法被使用。
示例脚本:
请将以下函数复制并粘贴到您的脚本编辑器中。当您使用它时,请设置您要使用的颜色。
function createLabelByGmailApi(name) {
var label = GmailApp.getUserLabelByName(name);
if (label) return label;
var textColor = "#89d3b2"; // Please set this.
var backgroundColor = "#ffbc6b"; // Please set this.
var userId = "me";
var resource = Gmail.newLabel();
resource.labelListVisibility = "labelShow";
resource.messageListVisibility = "show";
resource.name = name;
var labelColor = Gmail.newLabelColor();
labelColor.textColor = textColor;
labelColor.backgroundColor = backgroundColor;
resource.color = labelColor;
Gmail.Users.Labels.create(resource, userId);
return GmailApp.getUserLabelByName(name);
}
对于问题 2:
how would I be able to interface this with the code below?
为了使用您的脚本使用以上功能,请修改如下。
修改了你的脚本:
从:
var findOrCreateLabel = function(name) {
if (labelCache[name] === undefined) {
labelCache[name] = GmailApp.getUserLabelByName(name) || GmailApp.createLabel(name);
}
return labelCache[name];
}
到:
var findOrCreateLabel = function(name) {
if (labelCache[name] === undefined) {
labelCache[name] = GmailApp.getUserLabelByName(name) || createLabelByGmailApi(name); // Modified
}
return labelCache[name];
}
注:
textColor
和 backgroundColor
的样本颜色是一个极端的例子。
参考:
- Users.labels: create
- 请从以上文件中选择
textColor
和backgroundColor
。
如果我误解了你的问题,这不是你想要的结果,我深表歉意。
我正在尝试使用 Google Apps 脚本为我的 Gmail 收件箱创建一个自动标签器。
在某些情况下,我的大部分电子邮件都有截止日期,我将在下面 post 编写的代码基本上会解析电子邮件,找到 #DL 并创建一个名称为截止日期的标签。我还希望标签具有特定颜色,具体取决于该截止日期的剩余时间。
不幸的是,我发现 GAS API 无法显示 changing/creating 带有颜色的标签,但我还发现,通过高级 Google 服务,可以定义标签的颜色。接受条款和条件并启用高级 Google 服务时,自动完成显示选项:
Gmail.newLabelColor()
是否可以使用它来使用 GAS 创建具有不同颜色的新标签,如果可以,我如何将其与下面的代码连接起来?
var filters = [
{ match: /[\n\r][ \t]*#DL:[ \t]*([^\n\r]*)/, archive: false },
];
var from = [];
function labeler() {
var batchSize = 10;
var labelCache = {};
var query = "in:anywhere";
var threads = GmailApp.search(query, 0, batchSize);
GmailApp.getMessagesForThreads(threads);
var findOrCreateLabel = function(name) {
if (labelCache[name] === undefined) {
labelCache[name] = GmailApp.getUserLabelByName(name) || GmailApp.createLabel(name);
}
//GmailApp.createLabel(name);
//createLabelByGmailApi(name);
return labelCache[name];
}
var applyLabel = function(name, thread){
var label = null;
var labelName = "";
name.split('&').forEach(function(labelPart, i) {
labelName = labelName + (i===0 ? "" : "&") + labelPart.trim();
label = findOrCreateLabel(labelName);
});
thread.addLabel(label);
}
threads.forEach(function(thread) {
var messages = thread.getMessages();
if (messages == null) return;
var message = messages[messages.length - 1];
var body = message.getRawContent();
var archive = true;
filters.forEach(function(filter){
var matches = filter.match.exec(body);
if (matches !== null) {
var label = filter.name || matches[1];
var data = datestd(label);
var cor = datecalc(data);
label = "Datas/" + data;
if (label !== undefined) applyLabel(label, thread);
if (filter.archive !== undefined && !filter.archive) archive = false;
}
});
if (archive) thread.moveToArchive();
});
}
function createLabelByGmailApi(name,color) {
var label = GmailApp.getUserLabelByName(name);
if (label) return label;
var textColor = "#ffffff";
if (color=='red'){
var backgroundColor = "#ac2b16";
} else if (color=='yellow'){
var backgroundColor = "#fad165";
} else if (color=='green'){
var backgroundColor = "#076239";
} else {
var backgroundColor = "#41236d";
}
var userId = "me";
var resource = Gmail.newLabel();
resource.labelListVisibility = "labelShow";
resource.messageListVisibility = "show";
resource.name = name;
var labelColor = Gmail.newLabelColor();
labelColor.textColor = textColor;
labelColor.backgroundColor = backgroundColor;
resource.color = labelColor;
Gmail.Users.Labels.create(resource, userId);
return GmailApp.getUserLabelByName(name);
}
抱歉,如果这个问题看起来很愚蠢,或者如果它真的很容易做,我对此并不是很有经验,并且通过搜索找不到办法。
对于问题 1:
Is it possible to use this to create a new label with a different color using GAS?
这个答案是肯定的。
- 您想用该颜色创建新标签。
- 您想使用带有 Google Apps 脚本的 Gmail API 来实现此目的。
- 您已经在高级 Google 服务中启用了 Gmail API。
如果我的理解是正确的,这个示例脚本和修改怎么样?请将此视为几个答案之一。
在这个示例脚本中,Users.labels: Gmail API 的创建方法被使用。
示例脚本:
请将以下函数复制并粘贴到您的脚本编辑器中。当您使用它时,请设置您要使用的颜色。
function createLabelByGmailApi(name) {
var label = GmailApp.getUserLabelByName(name);
if (label) return label;
var textColor = "#89d3b2"; // Please set this.
var backgroundColor = "#ffbc6b"; // Please set this.
var userId = "me";
var resource = Gmail.newLabel();
resource.labelListVisibility = "labelShow";
resource.messageListVisibility = "show";
resource.name = name;
var labelColor = Gmail.newLabelColor();
labelColor.textColor = textColor;
labelColor.backgroundColor = backgroundColor;
resource.color = labelColor;
Gmail.Users.Labels.create(resource, userId);
return GmailApp.getUserLabelByName(name);
}
对于问题 2:
how would I be able to interface this with the code below?
为了使用您的脚本使用以上功能,请修改如下。
修改了你的脚本:
从:var findOrCreateLabel = function(name) {
if (labelCache[name] === undefined) {
labelCache[name] = GmailApp.getUserLabelByName(name) || GmailApp.createLabel(name);
}
return labelCache[name];
}
到:
var findOrCreateLabel = function(name) {
if (labelCache[name] === undefined) {
labelCache[name] = GmailApp.getUserLabelByName(name) || createLabelByGmailApi(name); // Modified
}
return labelCache[name];
}
注:
textColor
和backgroundColor
的样本颜色是一个极端的例子。
参考:
- Users.labels: create
- 请从以上文件中选择
textColor
和backgroundColor
。
- 请从以上文件中选择
如果我误解了你的问题,这不是你想要的结果,我深表歉意。