使用Google Apps Script提取Gmail邮件数据到Google Sheets的实现问题
解决方案
核心实现逻辑为读取邮件正文内容,通过正则表达式匹配对应字段的取值后填充到目标对象,即可写入表格。原代码onOpen函数缺少UI实例定义的问题已同步修复。
完整修改后代码
function onOpen(e){ const ui = SpreadsheetApp.getUi(); ui.createMenu("Tessa").addItem("Get Emails by Label", "getGmailEmails").addToUi(); } function getGmailEmails(){ var label = GmailApp.getUserLabelByName("tobeprocessed"); var threads = label.getThreads(); for(var i = threads.length - 1; i >=0; i--){ var messages = threads[i].getMessages(); for (var j = 0; j <messages.length; j++){ var message = messages[j]; if (message.isUnread()){ extractDetails(message); GmailApp.markMessageRead(message); } } threads[i].removeLabel(label); } } function extractDetails(message){ var emailData = { Locatie: "Null", Score: "Null", Datum: "Null", Opmerking: "Null", } emailData.Datum = message.getDate(); // 获取邮件纯文本正文 const emailContent = message.getPlainBody(); // 匹配Locatie字段 const locatieMatch = emailContent.match(/Locatie\s*:\s*(.*?)(?=\r?\n|$)/i); if (locatieMatch) emailData.Locatie = locatieMatch[1].trim(); // 匹配Score字段 const scoreMatch = emailContent.match(/Score\s*:\s*(.*?)(?=\r?\n|$)/i); if (scoreMatch) emailData.Score = scoreMatch[1].trim(); // 匹配Opmerking字段 const opmerkingMatch = emailContent.match(/Opmerking\s*:\s*(.*?)(?=\r?\n|$)/i); if (opmerkingMatch) emailData.Opmerking = opmerkingMatch[1].trim(); var activeSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var emailDataArr = []; for(var propName in emailData){ emailDataArr.push(emailData[propName]); } activeSheet.appendRow(emailDataArr); }
字段匹配规则调整说明
如果你的邮件中字段格式和默认匹配规则不一致,可自行修改正则表达式的匹配前缀:
- 若字段前没有冒号,可删除正则中的
\s*:部分 - 若邮件为HTML格式存在特殊标签,可将
message.getPlainBody()替换为message.getBody(),再调整正则适配HTML标签结构 - 若字段为中文名称,直接替换正则中的对应英文关键词即可
内容的提问来源于stack exchange,提问作者Tessa Beijloos
相关产品推荐
相关产品推荐

