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

如何通过Google Script获取非收件箱Gmail线程或昨日创建的线程?

嗨,我来帮你解决这两个Google Script里的Gmail线程获取问题!下面分两种场景给你具体的实现方案:

一、获取所有线程中的最近100条(不限于收件箱)

默认的GmailApp.getInboxThreads()只能抓取收件箱里的线程,要覆盖所有位置(包括已归档、已发送、草稿等),咱们得用GmailApp.search()结合Gmail的搜索语法来实现。

Gmail的搜索默认是按最新时间排序的,所以只需要搜索所有位置的邮件,然后取前100条线程就行。代码示例如下:

function getLatest100Threads() {
  // 搜索所有位置的邮件,按最新排序,取前100条线程
  const threads = GmailApp.search('in:anywhere', 0, 100);
  
  // 可以在这里处理获取到的线程,比如打印线程主题
  threads.forEach(thread => {
    console.log(thread.getFirstMessageSubject());
  });
  
  return threads;
}

小提示:in:anywhere是Gmail的搜索运算符,代表遍历所有邮件文件夹;后面的0, 100分别是起始索引和返回数量,和getInboxThreads的参数逻辑一致。

二、获取昨日创建的所有线程

要抓取昨日创建的线程,核心是构造时间范围搜索条件,先计算出昨日的起始和结束日期,再用GmailApp.search()来过滤。

这里需要用Utilities.formatDate()来格式化日期,适配Gmail的搜索语法(日期格式为YYYY/MM/DD)。代码示例如下:

function getYesterdayThreads() {
  const timezone = Session.getScriptTimeZone();
  const today = new Date();
  // 计算昨日的日期
  const yesterday = new Date(today);
  yesterday.setDate(today.getDate() - 1);
  
  // 格式化昨日的起始(00:00)和结束(23:59)时间对应的日期字符串
  const startDate = Utilities.formatDate(yesterday, timezone, 'yyyy/MM/dd');
  const endDate = Utilities.formatDate(yesterday, timezone, 'yyyy/MM/dd');
  
  // 构造搜索条件:昨日创建的所有线程,遍历所有位置
  const searchQuery = `after:${startDate} before:${endDate}T23:59:59 in:anywhere`;
  const threads = GmailApp.search(searchQuery);
  
  // 处理线程示例
  console.log(`找到 ${threads.length} 条昨日创建的线程`);
  threads.forEach(thread => {
    console.log(thread.getFirstMessageSubject());
  });
  
  return threads;
}

注意:Gmail的after和before运算符默认是按日期的0点计算的,所以加上T23:59:59可以确保覆盖昨日一整天的邮件;另外Session.getScriptTimeZone()会获取脚本的时区,避免时间偏移问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:01:05