代码之家  ›  专栏  ›  技术社区  ›  Caleb Matos

使用谷歌脚本从Gmail获取附件

  •  1
  • Caleb Matos  · 技术社区  · 7 年前

    我的剧本很管用。。。。主要地它将检查我的电子邮件中的线程,拉邮件,然后将附件导入工作表。问题是,当下一个小时收到下一封电子邮件并且脚本再次运行时,它不会拉取最近的附件,它只会拉取第一个附件。我甚至试着在每次运行时将消息移动到垃圾箱,但它仍然会将其从垃圾箱中拉出。这是我的密码。

    function importReport() {
    
      var threads = GmailApp.search('in:inbox from:"system@Report.com"');
      var message = threads[0].getMessages()[0];
      var attachment = message.getAttachments()[0];
      attachment.setContentType('text/csv');
    
     // Is the attachment a CSV file
     if (attachment.getContentType() === "text/csv") {
    
        var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("RawReport");
        var csvData = Utilities.parseCsv(attachment.getDataAsString(), ",");
    
      // Remember to clear the content of the sheet before importing new data
       sheet.clearContents().clearFormats();
       sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
    
     GmailApp.moveMessageToTrash(message);
      }
    
    
    }
    

    2 回复  |  直到 7 年前
        1
  •  3
  •   Amit Agarwal    7 年前

    您应该尝试从Gmail线程中提取最后一条消息,而不是第一条消息。

    var messages = threads[0].getMessages();
    var message = messages[messages.length - 1];
    
        2
  •  2
  •   Caleb Matos    7 年前

    感谢用户@AmitAgarwal,修复如下。

    //download the thread with all the attachments (they will build up over time)
       var message = threads[0].getMessages(); 
      //Get the most recent attachment
      var attachment = message[message.length - 1].getAttachments()[0];
    

    这将下载整个线程,并获得最新的附件。

    我想到的另一个解决方案是在拉数组之后反转它。

    var message = threads[0].getMessages();
    message.reverse();
    var attachment = message[0].getAttachments()[0];