修改Apps Script实现Gmail附件覆盖写入Google Drive并保留版本历史
修改后的Apps Script代码:覆盖同名附件并保留版本历史
以下是调整后的代码,实现检测目标文件夹中是否存在同名文件,存在则覆盖并保留版本历史,不存在则新建文件的功能:
function saveAttachmentInFolder(){ var folder = DriveApp.getFolderById('xxosi2'); var userId = "please.thanks@gmail.com"; var query = "label:thankyoucards-reports"; var res = Gmail.Users.Messages.list(userId, {q: query}); // 处理无匹配邮件的情况,避免报错 if (!res.messages) return; res.messages.forEach(function(m){ var attA = GmailApp.getMessageById(m.id).getAttachments(); attA.forEach(function(a){ var fileName = a.getName(); var existingFiles = folder.getFilesByName(fileName); if (existingFiles.hasNext()) { // 存在同名文件,覆盖内容并保留版本历史 var existingFile = existingFiles.next(); existingFile.setBlob(a.copyBlob()); } else { // 无同名文件,创建新文件 folder.createFile(a.copyBlob()).setName(fileName); } }); }); }
关键逻辑说明:
- 用
folder.getFilesByName(fileName)检索目标文件夹内的同名文件,Drive允许同文件夹下存在多个同名文件,此处默认覆盖第一个匹配到的文件 - 调用
existingFile.setBlob(a.copyBlob())覆盖文件内容,该操作会自动在Google Drive中生成新版本,保留历史记录 - 新增空结果判断
if (!res.messages) return,避免无匹配邮件时触发报错
内容的提问来源于stack exchange,提问作者Yogwhatup
相关产品推荐
相关产品推荐

