如何用Google App Script解决Gmail近10分钟邮件查询返回0线程问题
问题修复方案
错误原因
代码的问题出在Gmail搜索查询的构造规则不符合要求,共2处核心错误:
after:参数格式错误:Gmail搜索语法中after:仅支持秒级Unix时间戳或yyyy/mm/dd格式的日期,直接拼接Date对象的默认字符串输出,Gmail无法识别。Date.getTime()返回的是毫秒级时间戳,需要除以1000取整后才能作为after:的参数值。- 主题搜索规则错误:如果搜索的主题包含空格,必须用英文双引号包裹关键词,否则Gmail只会匹配空格前的第一个词,无法匹配完整主题。
修复后的代码
function testforemails(){ var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName("Emails"); var Gmail = GmailApp; var lasttime = sheet.getRange("Z1").getValue(); Logger.log(lasttime); var cdate = new Date(); var ctime = cdate.getTime(); var qDate = new Date(ctime - 600000); // 往前推10分钟 Logger.log("QDATE IS " + qDate); // 转换为秒级时间戳 var qTimestamp = Math.floor(qDate.getTime() / 1000); // 修复查询语句:主题加引号,after用秒级时间戳,加in:anywhere避免归档/垃圾箱邮件搜不到 var targetSubject = "defined subject of emails"; // 替换成实际要搜索的完整主题 var query = `subject:"${targetSubject}" after:${qTimestamp} in:anywhere`; var threadsNew = Gmail.search(query); Logger.log(threadsNew.length); var folderid = 'define folder id' // 替换成实际的文件夹ID var folder = DriveApp.getFolderById(folderid); for(var n in threadsNew){ var thdNew = threadsNew[n]; var msgsNew = thdNew.getMessages(); var msgNew = msgsNew[msgsNew.length-1]; // 处理附件逻辑 var bodyNew = msgNew.getBody(); var plainbody = msgNew.getPlainBody(); var subject = msgNew.getSubject(); var Etime = msgNew.getDate(); var attachments = msgNew.getAttachments(); if(attachments.length > 0) { // 增加判断避免无附件时抛出异常 var attachment = attachments[0]; // 补充附件处理逻辑 } Logger.log(Etime); Logger.log(subject); } Logger.log(threadsNew.length); }
额外校验说明
如果修改后还是搜不到,可以先手动把生成的query变量值复制到Gmail网页端的搜索框执行,确认是否有匹配结果,排除关键词本身不匹配的问题。
内容的提问来源于stack exchange,提问作者Mehdi Abbas
相关产品推荐
相关产品推荐

