如何使用Google Apps Script获取特定主题Gmail邮件截图并导入Google Sheets?
获取特定主题Gmail邮件截图并导入Google Sheets
核心实现思路
- 搜索指定主题的Gmail邮件线程
- 提取每封邮件的网页永久链接
- 通过PageSpeed Insights API生成邮件网页的截图
- 将截图插入到目标Google Sheets中
前置准备
- 登录Google Cloud Console,启用PageSpeed Insights API(需关联你的Google账号项目)
- 确保脚本已授权访问Gmail、UrlFetch、Drive、Google Sheets的权限
完整整合代码
function importGmailScreenshotsToSheets() { // 配置参数 const subjectQuery = 'subject:"Daily Report"'; // 目标邮件主题 const sheetId = "YOUR_SHEET_ID"; // 替换为你的Google Sheets ID const sheetName = "Sheet1"; // 替换为目标工作表名称 // 获取目标邮件线程及消息 const threads = GmailApp.search(subjectQuery); if (threads.length === 0) { console.log("未找到匹配主题的邮件"); return; } const msgs = GmailApp.getMessagesForThreads(threads).flat(); // 扁平化消息数组 // 初始化目标工作表 const sheet = SpreadsheetApp.openById(sheetId).getSheetByName(sheetName); sheet.clear(); // 清空旧数据(可选) sheet.getRange(1, 1).setValue("邮件主题"); sheet.getRange(1, 2).setValue("邮件截图"); // 遍历邮件生成截图并插入表格 msgs.forEach((msg, index) => { try { // 获取邮件网页永久链接 const emailUrl = msg.getPermalink(); const emailSubject = msg.getSubject(); // 调用PageSpeed API获取截图 const apiUrl = `https://www.googleapis.com/pagespeedonline/v4/runPagespeed?screenshot=true&fields=screenshot&url=${encodeURIComponent(emailUrl)}`; const response = UrlFetchApp.fetch(apiUrl); const data = JSON.parse(response.getContentText()); // 转换为图片Blob const screenshotBlob = Utilities.newBlob( Utilities.base64DecodeWebSafe(data.screenshot.data), "image/png", `${emailSubject}_${index}.png` ); // 插入到Sheets并调整尺寸 const row = index + 2; sheet.getRange(row, 1).setValue(emailSubject); sheet.insertImage(screenshotBlob, 2, row).setWidth(300).setHeight(400); console.log(`已处理邮件:${emailSubject}`); } catch (err) { console.error(`处理邮件失败:${err.message}`); } }); }
关键代码说明
msg.getPermalink():获取单封邮件的网页版永久链接,这是生成截图的核心依据- PageSpeed API调用:仅请求
screenshot字段以减少数据传输,encodeURIComponent处理URL特殊字符 insertImage():将图片Blob直接插入到指定单元格,可通过setWidth/setHeight调整显示尺寸
注意事项
- PageSpeed API有免费调用额度限制(每月1000次),大量邮件处理需留意配额
- 部分邮件可能因权限或格式问题无法生成截图,代码中已加入异常捕获
- 首次运行脚本时,需按照提示完成权限授权流程
内容的提问来源于stack exchange,提问作者user12736831
相关产品推荐
相关产品推荐

