是否可以使用 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];
}

注:

  • textColorbackgroundColor 的样本颜色是一个极端的例子。

参考:

如果我误解了你的问题,这不是你想要的结果,我深表歉意。