我正在尝试使用Google Apps脚本为我的Gmail收件箱创建一个自动标签器。
在某些情况下,我的大多数电子邮件都有截止日期,而我将在下面发布的代码通过电子邮件解析,找到#DL并创建带有截止日期的标签。我还希望标签具有特定的颜色,具体取决于该截止日期的时间。
不幸的是,我发现GAS API无法更改/创建具有颜色的标签,但我还发现,通过高级Google服务,可以定义标签的颜色。在接受条款和条件并启用高级Google服务时,AutoComplete向我展示了选项:
gmail.newlabelcolor((
是否可以使用它来创建具有不同颜色的新标签,如果是,我将如何将其与下面的代码接口?
var filters = [
{ match: /[nr][ t]*#DL:[ t]*([^nr]*)/, 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:
是否可以使用它来创建具有不同颜色的新标签?
这个答案是肯定的。
- 您想用颜色创建新标签。
- 您想使用Google Apps脚本使用Gmail API实现此目的。
- 您已经在高级Google Services上启用了Gmail API。
如果我的理解是正确的,那么此示例脚本和修改如何?请将其视为几个答案之一。
在此示例脚本中,用户的方法:使用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:
我将如何与下面的代码接口?
要使用脚本使用上述函数,请按以下方式修改。
修改了您的脚本:
从: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
的样品颜色是一个极端的例子。
参考:
- 用户。标签:创建
- 请从上述文档中选择
textColor
和backgroundColor
。
- 请从上述文档中选择
如果我误解了您的问题,这不是您想要的结果,我深表歉意。