如何通过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
相关产品推荐
相关产品推荐

