You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Google Apps Script实现Gmail附件按主题转存Google Drive?

Google Apps Script 邮件附件自动分类存储实现方案

核心实现代码

function saveAttachmentsFromEmails() {
  // 配置项:替换为你的目标关键词和Drive父文件夹ID(留空则用"我的云端硬盘")
  const TARGET_KEYWORD = "报表";
  const PARENT_FOLDER_ID = "";

  // 搜索主题含指定关键词的最近100封邮件,可调整数量或添加时间范围(如after:2024/01/01)
  const threads = GmailApp.search(`subject:${TARGET_KEYWORD}`, 0, 100);
  
  threads.forEach(thread => {
    const messages = thread.getMessages();
    messages.forEach(message => {
      const subject = message.getSubject();
      const parentFolder = PARENT_FOLDER_ID ? DriveApp.getFolderById(PARENT_FOLDER_ID) : DriveApp.getRootFolder();
      let targetFolder = getFolderByName(parentFolder, subject);
      
      // 无同名文件夹则创建
      if (!targetFolder) {
        targetFolder = parentFolder.createFolder(subject);
        console.log(`创建文件夹:${subject}`);
      }
      
      // 遍历并保存附件,跳过已存在的文件
      const attachments = message.getAttachments();
      attachments.forEach(attachment => {
        if (!fileExistsInFolder(targetFolder, attachment.getName())) {
          targetFolder.createFile(attachment);
          console.log(`保存附件:${attachment.getName()} 至 ${subject}`);
        }
      });
    });
  });
}

// 辅助函数:在父文件夹中查找同名子文件夹
function getFolderByName(parentFolder, folderName) {
  const folders = parentFolder.getFoldersByName(folderName);
  return folders.hasNext() ? folders.next() : null;
}

// 辅助函数:检查文件夹内是否存在同名文件
function fileExistsInFolder(folder, fileName) {
  const files = folder.getFilesByName(fileName);
  return files.hasNext();
}

代码说明

  • 关键词匹配:通过GmailApp.search筛选目标邮件,修改TARGET_KEYWORD即可切换匹配关键词,也可扩展搜索条件(如添加未读邮件筛选is:unread)。
  • 文件夹校验:getFolderByName遍历父文件夹子目录,判断是否存在与邮件主题同名的文件夹。
  • 文件夹创建:未找到同名文件夹时,自动在指定父目录下生成新文件夹。
  • 附件存储:遍历邮件附件,通过fileExistsInFolder避免重复存储,仅保存未存在的附件。

使用步骤

  1. 打开Google Apps Script编辑器(从Google Sheets/文档的「扩展程序」-「Apps Script」进入)。
  2. 新建脚本文件,粘贴上述代码。
  3. 修改TARGET_KEYWORD为你的目标关键词,如需指定父文件夹,填写PARENT_FOLDER_ID(从Drive文件夹URL中提取ID)。
  4. 首次运行时完成权限授权,按照页面提示操作即可。
  5. 可设置时间驱动触发器(左侧「触发器」-「添加触发器」),实现定时自动执行(如每日一次)。

内容的提问来源于stack exchange,提问作者Lucas Davi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 19:03:36