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

GmailApp无法返回邮件对话全部消息及类使用困惑求助

问题分析与解决方法

核心问题1:getSubject()报错原因

threads[i].getMessages()返回的是GmailMessage类型的数组,你直接对数组调用getSubject()肯定会报错——这个方法是单个邮件对象的专属方法,数组本身没有这个方法。必须遍历数组里的每一封邮件,单独调用getSubject()。

核心问题2:正文覆盖问题

你原来的代码里,循环线程内的所有消息时,每次都把正文写入同一行的第3列,最后只会保留该线程中最后一条消息的正文,没法完整记录所有邮件内容。

修正后的代码

var sheet = SpreadsheetApp.getActiveSheet();
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

function onOpen() {
  var menuEntries = [ {name: "Load Emails", functionName: "getEmails"} ];
  spreadsheet.addMenu("GetOrders", menuEntries);
}

function getEmails(){
  var label = GmailApp.getUserLabelByName("taxes/payments");
  var threads = label.getThreads();
  var row = 2; // 从第2行开始写入数据

  for (var i = 0; i < threads.length; i++) {
    var thread = threads[i];
    // 获取当前线程内的所有邮件
    var messages = thread.getMessages();

    // 遍历每一封邮件,单独处理主题和正文
    for (var j = 0; j < messages.length; j++) {
      var msg = messages[j];
      // 写入单封邮件的主题
      sheet.getRange(row, 1).setValue(msg.getSubject());
      // 写入单封邮件的发送日期(如需线程最后消息日期,可改为thread.getLastMessageDate())
      sheet.getRange(row, 2).setValue(msg.getDate());
      // 写入单封邮件的正文
      sheet.getRange(row, 3).setValue(msg.getPlainBody());
      row++; // 每处理一封邮件,行号+1
    }
  }
}

关键修改说明

  • 移除了错误的mes.getSubject()调用,改为遍历messages数组中的每个邮件对象单独调用getSubject()
  • 结合线程循环与消息循环,让每一封邮件单独占一行,确保所有主题和正文都能被完整记录
  • 调整日期为单封邮件的发送日期,若仍需线程级的最后消息日期,可自行替换回thread.getLastMessageDate()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 19:13:13