【问题标题】:Google Apps Script - Relabeling EmailsGoogle Apps 脚本 - 重新标记电子邮件
【发布时间】:2017-02-04 07:57:06
【问题描述】:

过去几周我一直在玩这个脚本。该脚本的目标是通过报告收件箱,从电子邮件附件中提取报告数据,复制到谷歌电子表格中,然后重新标记电子邮件以将其从收件箱中删除,以防止意外重复复制报告。

脚本按此顺序运行:

  1. 在收件箱中查找带有附件的新电子邮件
  2. 复制附件数据
  3. 粘贴到下一个打开行的电子表格中
  4. 使用“报告”而不是“收件箱”重新标记电子邮件,以将所有报告移动到报告文件夹中

我已成功完成步骤 1 - 3,但对于我的一生,我无法让重新标记工作。当我在 Google Apps 控制台中运行调试时,它不会返回任何错误。下面粘贴的是执行重新标记的脚本的摘录:

  for (var i = 0; i < myLabel.length; i++) {
    labels = myLabel[i].getLabels();
    for (var j = 0; j < labels.length; j++) {
      labels[j].addLabel("test_2");
      labels[j].removeLabel("Test");
    }
  }

以下是我正在运行的完整脚本。

function getCSV() {


  // Create variable that looks for Gmails in the main inbox
  var myLabel = GmailApp.getUserLabelByName("test");
  Logger.log("myLabel:",myLabel);

  // Create variable that is filled with all threads within Inbox    label
  var threads = myLabel.getThreads();
  Logger.log("threads:",threads);

  // Retrieves all messages in the specified thread
  var msgs = GmailApp.getMessagesForThreads(threads);
  Logger.log("msgs:",msgs);

  // Uses active sheet the script is implemented on
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("test");

  // Grabs CSV data from attachments and pastes into next available row in Spreadsheet
  for (var i = 0; i < threads.length; i++) {
    var messages = threads[i].getMessages();
    for (var j = 0; j < messages.length; j++) {
      var attachments = messages[j].getAttachments();
      Logger.log("attachments:",attachments);
      var csvData = Utilities.parseCsv(attachments[j].getDataAsString(), ",");
      Logger.log(csvData);
      for (var k = 1; k < csvData.length; k++) {
        var dataPaste = sheet.appendRow(csvData[k]);
        Logger.dataPaste;
      }
    }
  }
  // Removes Inbox Label and Adds Report Label
  for (var i = 0; i < myLabel.length; i++) {
    labels = myLabel[i].getLabels();
    for (var j = 0; j < labels.length; j++) {
      labels[j].addLabel("test_2");
      labels[j].removeLabel("Test");
    }
  }
}

【问题讨论】:

    标签: email google-apps-script


    【解决方案1】:

    我最终想通了。此外,我添加了一个部分,如果 CSV 被压缩,则可以提取数据。

    function getCSV() {
    
    
      // Associated Inbox label and Report Label with variables
      var myInboxLabel = GmailApp.getUserLabelByName("Test");
      var myReportLabel = GmailApp.getUserLabelByName("test_2");
    
      // Create variable that is filled with all threads within Inbox label
      var threads = myInboxLabel.getThreads();
      Logger.log("threads:" + threads);
    
      // Retrieves all messages in the specified thread
      var msgs = GmailApp.getMessagesForThreads(threads);
      Logger.log("msgs:" + msgs);
    
      // Uses active sheet the script is implemented on
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = ss.getSheetByName("test");
    /*   Script to pull data from CSV that is NOT zipped
      // Grabs CSV data from attachments and pastes into next available row in Spreadsheet
      for (var i = 0; i < threads.length; i++) {
        var messages = threads[i].getMessages();
        for (var j = 0; j < messages.length; j++) {
          var attachments = messages[j].getAttachments();
          Logger.log("attachments:" + attachments);
          var csvData = Utilities.parseCsv(attachments[j].getDataAsString(), ",");
          Logger.log("csvData:" + csvData);
          for (var k = 1; k < csvData.length; k++) {
            var dataPaste = sheet.appendRow(csvData[k]);
            Logger.dataPaste;
          }
        }
      }
    */
    
    // Grabs CSV within a zip folder and pastes into next available row in Spreadsheet
     for (var i = 0; i < threads.length; i++) {
        var messages = threads[i].getMessages();
        for (var j = 0; j < messages.length; j++) {
          var attachments = messages[j].getAttachments();
          var extracted = Utilities.unzip(attachments[j]);
          var csvData = Utilities.parseCsv(extracted[j].getDataAsString(), ",");
          Logger.log(csvData);
          for (var k = 1; k < csvData.length; k++) {
            var dataPaste = sheet.appendRow(csvData[k]);
            Logger.dataPaste;
          }
        }
      }
      // Removes Inbox Label and Adds Report Label
      for (var x in threads) {
        var thread = threads[x];
        thread.removeLabel(myInboxLabel);
        thread.addLabel(myReportLabel);
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-21
      • 2014-08-02
      • 2020-12-15
      • 2018-10-21
      • 2013-08-15
      • 1970-01-01
      相关资源
      最近更新 更多