代码之家  ›  专栏  ›  技术社区  ›  xd1936

Gmail应用程序不会取消启动Gmail消息[重复]

  •  0
  • xd1936  · 技术社区  · 6 年前

    好吧,我觉得网络Gmail太疯狂了。我运行了一个谷歌应用程序脚本,该脚本将我的“待办事项”标签部分添加到我手动启动的任何线程中,然后对其进行存档和取消启动。下面是一个片段。我很感激任何帮助。

    运行脚本后,线程将获得标签并取消拖动,但web Gmail中线程/消息旁边的星形图标仍显示为选中状态。如果我转到带星号的邮件标签/文件夹,则不会显示任何内容。如果我立即重新运行脚本,它不会找到任何带星号的线程。这似乎表明脚本工作正常。问题似乎是,web Gmail仍然希望将其显示为星号,尽管它不是。Gmail Android应用程序不显示应用于该线程的星号。照片更值钱。。。

    脚本运行后我的收件箱是什么样子。注意星星: What it looks like after the script runs

    然而,没有星号信息: Yet no Starred messages

    function addStarred2ToDo() {
      var threads = GmailApp.search('is:starred');
      for (var h in threads) {
        var messages = threads[h].getMessages();
        for (var i in messages) {
          if (messages[i].isStarred()) {
            messages[i].unstar();
          }
        }
      }
    }
    

    编辑: 我也试过了,但都没有达到预期效果。

    function thisOne() {
      var threads = GmailApp.search('is:starred');
      for (var h in threads) {
        var messages = threads[h].getMessages();
        for (var i in messages) {
          if (messages[i].isStarred()) {
            messages[i].unstar().refresh();
          }
        }
      }
    }
    
    function andThisOne() {
      var threads = GmailApp.search('is:starred');
      var toUnstar = [];
      threads.forEach(function (thread) {
        thread.getMessages().forEach(function (message) {
          if (message.isStarred()) {
            toUnstar.push(message);
          }
        });
      });
      GmailApp.unstarMessages(toUnstar);
    }
    
    0 回复  |  直到 6 年前
        1
  •  0
  •   Matthew Schwarz    4 年前

    如果你刷新gmail并将鼠标悬停在星星上,你会看到弹出窗口显示它没有被盯着。此外,当你从gmail中选择星号时,这似乎是一个问题,因为当我的脚本取消星号时,由我的过滤器设置的星号会正常工作。

        2
  •  0
  •   michaeldon    2 年前

    导致此显示问题的原因是,您没有强制Gmail通过呼叫来更新消息 refresh() 在你打电话给 unstar() .

    根据 GmailMessage#refresh() :

    从Gmail中重新加载此消息和相关状态(在标签、读取状态等发生更改时非常有用)。

    messages[i].unstar().refresh();
    

    应该足以通知Gmail新的星号状态。

    或者,在配额使用方面,修改消息的批处理调用将更有效:

    var toUnstar = [];
    threads.forEach(function (thread) {
      thread.getMessages().forEach(function (message) {
        if (message.isStarred()) {
          toUnstar.push(message);
          ...
        }
      });
    });
    GmailApp.unstarMessages(toUnstar);
    

    在我的示例中,我避免了使用 for .. in.. 使用更具表现力的语言 Array.forEach() 表明代码是我们希望应用于每个线程和所述线程中的每个消息的东西。

    关于 GmailApp.unstarMessages () :

    从这些消息中删除星号并强制刷新消息。