Google Apps Script-Gmail无匹配邮件/线程时的错误处理求助
解决Gmail搜索无匹配线程时脚本报错的问题
你的代码报错核心原因:在判断线程是否存在之前,就已经尝试访问了Threads[0]。当搜索结果为空时,Threads是一个空数组,Threads[0]返回undefined,再调用getMessages()必然抛出错误。
解决方案
把所有依赖线程存在的操作,全部移到if (Threads.length > 0)的判断块内部,确保只有找到匹配线程时才执行这些代码。同时可添加else分支处理无匹配的场景。
修改后的代码:
function ImportCDWFiles(e){ var Threads = GmailApp.search(e, 0, 1); // 先判断是否找到匹配线程,再执行后续操作 if (Threads.length > 0){ var Message = Threads[0].getMessages()[0]; var Attachment = Message.getAttachments()[0]; Logger.log(Threads.length); Logger.log(Attachment.getName()) // 注意:替换为实际目标文件夹对象,比如DriveApp.getFolderById("你的文件夹ID") var SourceFile = DriveApp.getFolderById("目标文件夹ID").createFile(Attachment.copyBlob()); var SourceID = SourceFile.getId(); var ConvertedSpreadsheetId = Drive.Files.insert({mimeType: MimeType.GOOGLE_SHEETS}, SourceFile).id; Logger.log("Converted File ID= "+ ConvertedSpreadsheetId) var Sheet = SpreadsheetApp.openById(ConvertedSpreadsheetId).getSheets()[0]; var Data = Sheet.getDataRange().getValues(); // 补充定义LastRow变量 var targetSheet = SpreadsheetApp.openById('SheetIDHere').getSheetByName('SheetName'); var LastRow = targetSheet.getLastRow(); var range = targetSheet.getRange(LastRow + 1, 1, Data.length, Data[0].length); range.setValues(Data); Drive.Files.remove(ConvertedSpreadsheetId); } else { // 无匹配线程时的提示日志 Logger.log("未找到匹配搜索条件「" + e + "」的邮件线程"); } }
额外注意点
- 原代码中的
Folder未定义,需替换为具体文件夹实例(如通过ID获取) LastRow变量需提前定义,否则会引发新的错误- 建议添加对
Attachment是否存在的判断,避免邮件无附件时再次报错
内容的提问来源于stack exchange,提问作者Morris Coyle
相关产品推荐
相关产品推荐

