首页 > 解决方案 > 使用 Google 应用脚本将电子邮件标记为已读

问题描述

我是 Google App Script 的业余爱好者。

让这个脚本运行正常,但需要再实现一个功能。现在我需要这个: 脚本读取的电子邮件我需要标记为已读

我试图整合几个选项,但没有积极的结果。

谁能帮我在脚本本身中实现它

function processInboxToSheet() {
  //var threads = GmailApp.getInboxThreads();
  // Have to get data separate to avoid google app script limit!
  var start = 0;
  var threads = GmailApp.search("newer_than:1d AND is:unread AND label:eur OR label:desc",0,100); 
  var sheet = SpreadsheetApp.getActiveSheet();
  var result = [];

  for (var i = 0; i < threads.length; i++) {
    var messages = threads[i].getMessages();

    var content = messages[0].getPlainBody();

    // implement your own parsing rule inside
    if (content) {
      var tmp;
      tmp = content.match(/\b([A-B\d][A-B\d]{4})\b/);
      var cod = (tmp && tmp[1]) ? tmp[1].trim() : 'Error';

      tmp = content.match(/\b(\d+[R])/);
      var prom = (tmp && tmp[1]) ? tmp[1].trim() : 'Error';

      tmp = content.match(/\b(\d{2}\.\d{2}\)\b/);
      var exp = (tmp && tmp[1]) ? tmp[1].trim() : 'Error';

      sheet.appendRow([cod, prom, exp]);

      Utilities.sleep(500);
    }


  }
};

标签: google-apps-script

解决方案


如果我理解正确,您希望将每个线程中的第一条消息标记为已读。为此,您必须使用markRead()

现在,这是一个对应于GmailMessage 类的方法。因此,您需要从此类的实例中调用此方法。现在,在您的代码中,您有一个变量messages,它是线程中消息的数组,而不是消息。要访问单个消息,您必须指定数组的索引。线程中的第一条消息对应于message[0],因此您必须使用markRead

因此,您唯一需要做的就是在for循环内的任何位置以及定义之后添加以下代码行messages

messages[0].markRead();

(如果您只想在消息具有正文内容时将消息标记为已读,则必须在if块内添加上面的行。)

此外,如果您想将线程标记为已读(GmailThread 也有一个markRead 方法for,您可以在循环开头的这行代码处:

threads[i].markRead();

我希望这有任何帮助。


推荐阅读