将google email中的附件直接下载到 google drive

步骤 1:打开 Google Apps Script

  1. 登录你的 Google 账户。
  2. 访问 Google Apps Script
  3. 点击 新建项目,这将创建一个新的脚本项目。

步骤 2:编写脚本

在新建项目中,复制并粘贴以下代码到代码编辑器中。此脚本将保存带有特定标签的邮件的附件到 Google Drive 中的指定文件夹。

 

function saveGmailAttachmentsToDrive() {
  var label = GmailApp.getUserLabelByName("SaveToDrive");  // 替换为你在Gmail中创建的标签名称
  if (!label) {
    Logger.log("标签 'SaveToDrive' 不存在");
    return;
  }

  var threads = label.getThreads();  // 获取所有带有该标签的邮件
  var folder = DriveApp.getFolderById("your-folder-id"); // 替换为你要保存附件的Google Drive文件夹ID

  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();
      
      for (var k = 0; k < attachments.length; k++) {
        var attachment = attachments[k];
        folder.createFile(attachment);  // 将附件保存到Google Drive
        Logger.log("保存附件: " + attachment.getName());
      }
    }
    
    threads[i].removeLabel(label);  // 可选:处理完邮件后,移除标签
  }
}

将文件名称换成邮件标题

 

function saveGmailAttachmentsToDrivetitle() {
  var label = GmailApp.getUserLabelByName("Todrivelabel");  // 替换为你在Gmail中创建的标签名称
  if (!label) {
    Logger.log("标签 'Todrivelabel' 不存在");
    return;
  }

  var threads = label.getThreads();  // 获取所有带有该标签的邮件
  var folder = DriveApp.getFolderById("1G1zNsg_VVSqK5OOaQf_os5jMJ5Ij132c"); // 替换为你要保存附件的Google Drive文件夹ID

  for (var i = 0; i < threads.length; i++) {
    var messages = threads[i].getMessages();
    
    for (var j = 0; j < messages.length; j++) {
      var message = messages[j];
      var attachments = message.getAttachments();
      var subject = message.getSubject(); // 获取邮件标题

      // 替换非法字符
      var safeSubject = subject.replace(/[\/:*?"<>|]/g, "_");

      for (var k = 0; k < attachments.length; k++) {
        var attachment = attachments[k];
        try {
          // 以邮件标题加上附件名作为文件名
          var fileName = safeSubject + "_" + attachment.getName();
          folder.createFile(attachment.setName(fileName));  // 保存附件到Google Drive
          Logger.log("保存附件: " + fileName);
        } catch (e) {
          Logger.log("保存附件时出错: " + e.toString());
        }
      }
    }
  }
}

 将多个名字表不同的CSV文件合并到一个excel中不同的工作薄中

 

function importCSVsToDifferentSheetsAndSaveBack() {
  try {
    var folder = DriveApp.getFolderById('YOUR_FOLDER_ID'); // 替换为包含 CSV 文件的文件夹 ID
    var files = folder.getFiles(); // 获取所有文件
    var fileCount = 0;

    // 创建一个新的 Google Sheets 文件
    var spreadsheet = SpreadsheetApp.create('Merged CSV Data'); 

    // 遍历文件,寻找 .csv 文件
    while (files.hasNext()) {
      var file = files.next();
      var fileName = file.getName();

      // 检查文件是否是以 .csv 结尾
      if (fileName.toLowerCase().endsWith('.csv')) {
        Logger.log('Found CSV file: ' + fileName); // 输出日志确认处理文件
        fileCount++;

        var csvData;
        try {
          csvData = Utilities.parseCsv(file.getBlob().getDataAsString()); // 尝试解析 CSV 文件
        } catch (e) {
          Logger.log('Error parsing CSV file: ' + fileName + ' - ' + e.toString());
          continue; // 如果解析失败,跳过该文件
        }

        var sheetName = fileName.substring(0, 30); // Google Sheets 工作表名长度限制为 31 字符
        var sheet = spreadsheet.insertSheet(sheetName); // 创建一个新的工作簿

        if (csvData.length > 0) {
          var numRows = csvData.length;
          var numColumns = csvData[0].length;

          // 检查工作簿是否有足够的行和列
          if (sheet.getMaxRows() < numRows) {
            sheet.insertRowsAfter(sheet.getMaxRows(), numRows - sheet.getMaxRows());
          }
          if (sheet.getMaxColumns() < numColumns) {
            sheet.insertColumnsAfter(sheet.getMaxColumns(), numColumns - sheet.getMaxColumns());
          }

          // 将 CSV 数据插入到该工作簿
          sheet.getRange(1, 1, numRows, numColumns).setValues(csvData);
          Logger.log('Data inserted into sheet: ' + sheetName);
        } else {
          Logger.log('No data found in file: ' + fileName);
        }
      }
    }

    if (fileCount === 0) {
      Logger.log('No CSV files found in the folder.');
      return;
    }

    Logger.log('All CSV files have been imported into different sheets.');

    // 将 Google Sheets 文件保存回原始文件夹
    var file = DriveApp.getFileById(spreadsheet.getId()); // 获取新创建的 Google Sheets 文件
    folder.addFile(file); // 将文件添加到原文件夹
    DriveApp.getRootFolder().removeFile(file); // 从根文件夹中移除,确保只在目标文件夹中

    Logger.log('Merged Google Sheets file saved back to the original folder.');

  } catch (e) {
    Logger.log('Error: ' + e.toString());
  }
}

 

 


代码说明:

  • label: 这个代码块会查找名为 "SaveToDrive" 的 Gmail 标签(你可以修改为你创建的任何标签名称)。所有带有该标签的邮件中的附件会被保存到 Google Drive 中。
  • folder.createFile(attachment): 这个函数将附件保存到 Google Drive 的指定文件夹。
  • removeLabel(label): 脚本将处理完后自动移除标签,以避免重复处理。如果不需要删除标签,可以将这行代码注释或删除。

步骤 3:修改脚本参数

  1. 设置 Gmail 标签

    • 打开 Gmail 并创建一个名为 SaveToDrive 的标签(或者使用你喜欢的任何名字)。
    • 将想要自动保存附件的邮件打上这个标签。
  2. 指定 Google Drive 文件夹

    • 打开 Google Drive,创建一个文件夹来存储附件。
    • 复制该文件夹的 ID。文件夹 ID 是其 URL 的一部分,例如,https://drive.google.com/drive/folders/**your-folder-id**
    • 将代码中的 your-folder-id 替换为这个文件夹的 ID。

步骤 4:设置定时触发器

  1. 在 Google Apps Script 中,点击左侧的时钟图标(“触发器”)。
  2. 点击 添加触发器 按钮,选择你刚刚编写的函数 saveGmailAttachmentsToDrive
  3. 设置触发频率(例如,每天运行一次,或者每小时运行一次),这样脚本会自动定期执行。

步骤 5:测试脚本

  1. 在 Gmail 中找到一封带有附件的邮件,并将其打上 SaveToDrive 标签。
  2. 返回 Google Apps Script,点击工具栏中的运行按钮(播放符号)来手动运行脚本。
  3. 检查你指定的 Google Drive 文件夹,看看附件是否已保存。

常见问题和调整:

  1. 没有找到标签: 如果脚本没有找到指定标签,请确保你在 Gmail 中正确创建了该标签,并且确保脚本中的标签名称和 Gmail 标签一致。

  2. 权限问题: 在首次运行脚本时,Google 会要求你授予权限,以便脚本能够访问 Gmail 和 Google Drive。请按提示操作并授予权限。

  3. 重复处理: 如果不想每次都重新处理同样的邮件,removeLabel(label) 可以帮助你移除标签,从而避免重复处理。如果不希望移除标签,可以注释掉这行代码。

通过这一步步操作,你可以实现自动保存 Gmail 中的附件到 Google Drive。如果有需要进一步修改的地方,比如只保存特定类型的文件或处理特定发件人的邮件,脚本可以进一步调整。

posted @ 2024-09-04 16:38  残阳飞雪  阅读(43)  评论(0编辑  收藏  举报