首页 > 解决方案 > 使用 Google App Script 阅读 Gmail 标签中的所有邮件

问题描述

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

拯救了这个对我有用但不正确的脚本。现在只为线程的第一条消息而不是所有消息读取和 phsarse 信息。

我需要阅读、检查和解析标签的所有消息,而不仅仅是线程的第一个。我需要脚本读取并解析位于标签上的所有单个消息。然后将所有标记为已读。

有人可以帮助我并更改代码来执行此操作吗?我查看了 Google APP 脚本手册,我尝试了不同的方法,但我无法让它工作。

谢谢!

  //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();
    messages[0].markRead();
    // 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

解决方案


为了将消息标记为已读,您必须迭代每个线程的消息。

你只得到线程的第一条消息,所以你必须替换

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

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

  .....

像这样:

function readMails (){

  var threads = GmailApp.search("newer_than:1d AND is:unread AND label:eur OR label:desc",0,100);

  //Iterate threads
  for (var i=0; i < threads.length; i++){

    var messages = threads[i].getMessages();

    //Iterate messages of each thread
    for (var k=0; k < messages.length; k++){
      var content = messages[k].getPlainBody();
      messages[k].markRead();

      .....
    }
  }
}

推荐阅读