为什么此脚本不收集所有Gmail?

时间:2019-05-08 12:12:42

标签: google-apps-script

我有一个Google应用程序脚本,该脚本收集有关Gmail邮件的信息,然后将其粘贴到Google工作表中。问题是它无法获取所有消息。它仅拾取每个线程的第一个。我感觉好像缺少在每个线程中循环的东西吗?有什么建议吗?

    function getMail(){
 var myspreadsheet = SpreadsheetApp.getActiveSpreadsheet();  
 var mysheet = myspreadsheet.getSheetByName("Sheet3");    

 var start = 0;
 var max = 99;
 var count =0;
 var row = mysheet.getLastRow()+1
 var maxDate = mysheet.getRange("B1").getValue()
 while(count < 4) 
 {

   var threads = GmailApp.getInboxThreads(start , max);
   var messages = GmailApp.getMessagesForThreads(threads); 
   var froms = [];
    messages.get
      for(var i = 0; i < threads.length; i++)
      {

        var msgDate = messages[i][0].getDate();
        if(msgDate>maxDate){
          froms.push([messages[i][0].getDate(),messages[i][0].getFrom(),messages[i][0].getSubject(),messages[i][0].getPlainBody()]);
        }
      }

   if(froms.length>0){
     mysheet.insertRows(2, froms.length)
     mysheet.getRange(2,1,froms.length,4).setValues(froms);
   }
   start =  start + 100;
    count++;
    }
}

1 个答案:

答案 0 :(得分:0)

您当前的脚本仅抓取messages[i][0],即该组中该线程的第一条消息。相反,您需要使用两个for循环遍历所有消息,正如您在下面的脚本中看到的那样,我使用messages[i][j]

function getMail() {
  var mySpreadsheet = SpreadsheetApp.getActiveSpreadsheet();  
  var mySheet = mySpreadsheet.getSheetByName("Sheet3");    

  var start = 0;
  var max = 99;
  var count = 0;
  var maxDate = mySheet.getRange("B1").getValue();

  while(count < 4) {
    var threads = GmailApp.getInboxThreads(start, max);
    var messages = GmailApp.getMessagesForThreads(threads); 
    var froms = [];

    for(var i = 0; i < messages.length; i++) {
      for(var j = 0; j < messages[i].length; j++) {
      var msgDate = messages[i][j].getDate();
        if(msgDate > maxDate) {
          froms.push([msgDate,messages[i][j].getFrom(),messages[i][j].getSubject(),messages[i][j].getPlainBody()]);
        }
      }
    }
    if(froms.length > 0) {
      mySheet.insertRows(2, froms.length);
      mySheet.getRange(2, 1, froms.length, 4).setValues(froms);
    }
    start =  start + 100;
    count++;
  }
}

重要更改:

  • 删除了var rows,因为在脚本的任何地方都没有使用它。
  • 首先将for循环更改为运行messages.length,而不是运行 线程。
  • 添加了另一个for循环以循环遍历所有消息 messages[i]
  • 您两次获得messages[i][0].getDate(),所以我只是使用已经定义的变量添加到数组中。
  • 较小的语法/间距变化,以确保脚本之间的一致性。