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

Google Apps Script提取Gmail附件至Drive时出现TypeError错误求助

Google Apps Script提取Gmail附件至Drive时出现TypeError错误求助

嘿,我一眼就看出问题所在啦!咱们来拆解一下:

你遇到的TypeError: messages[j].getAttachments is not a function错误,核心原因是对数据结构的理解偏差:GmailApp.getMessagesForThreads(threads)返回的是二维数组——外层数组对应每一条邮件线程,内层数组才是该线程里的具体邮件消息。你现在直接对messages[j](也就是整个线程的消息数组)调用getAttachments(),这当然会报错,因为数组本身没有这个方法呀!

接下来给你修正后的完整代码,同时做了一些优化:

function saveRatings() {
  var searchParams = {
    sender: "##Email adress here##",
    folderName: "Ratings File",
    attachName: "SB.xlsx"
  };

  // 检查目标文件夹是否存在,不存在则创建
  var folders = DriveApp.getFoldersByName(searchParams.folderName);
  var folder = folders.hasNext() ? folders.next() : DriveApp.createFolder(searchParams.folderName);
  Logger.log(folders.hasNext() ? "Folder already exists: " + folder.getName() : "Folder created: " + folder.getName());

  // 获取指定发件人的所有邮件线程
  var threads = GmailApp.search("from:" + searchParams.sender);
  // 获取线程对应的所有消息,返回二维数组:[线程1的消息数组, 线程2的消息数组, ...]
  var messagesByThread = GmailApp.getMessagesForThreads(threads);
  Logger.log("Looping through " + messagesByThread.length + " mail threads");

  // 先遍历每个邮件线程
  for (var j = 0; j < messagesByThread.length; j++) {
    // 取出当前线程里的所有消息(数组)
    var threadMessages = messagesByThread[j];
    // 再遍历线程里的每一条消息
    for (var m = 0; m < threadMessages.length; m++) {
      var singleMessage = threadMessages[m];
      var attachments = singleMessage.getAttachments();
      // 遍历当前消息的所有附件
      for (var k = 0; k < attachments.length; k++) {
        var attachment = attachments[k];
        // 用配置参数匹配附件名,更易维护
        if (attachment.getName() === searchParams.attachName) {
          folder.createFile(attachment);
          Logger.log("Saved attachment: " + attachment.getName() + " from mail: " + singleMessage.getSubject());
        }
      }
    }
  }
}

关键改动说明:

  • 新增了一层循环:先遍历线程的消息数组,再针对单个邮件消息调用getAttachments(),这是解决错误的核心
  • 把变量messages改名为messagesByThread,更直观体现它的二维数组结构
  • 用searchParams.attachName代替硬编码的文件名,让代码后期修改更方便
  • 优化了文件夹判断逻辑,用三元表达式简化代码
  • 增加了更详细的日志,方便你调试时查看执行情况

这样修改后,代码就能正确识别每一封邮件并提取匹配的Excel附件啦!

备注:内容来源于stack exchange,提问作者Chris Lewis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 07:49:12