You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

用Google Apps Script提取邮件正文至表格,match函数返回NULL求解决

解决Google Apps Script提取邮件正文到表格返回NULL的问题

问题根源

你的正则表达式和实际邮件正文格式不匹配,导致无法捕获内容:

  • 邮件里的字段格式是Account : xyz(冒号后有空格),但你写的正则是Account:\n,漏掉了冒号后的空格,直接导致匹配失败。
  • 部分正则的匹配逻辑不合理,比如Address:\n([\s\S]+)会直接匹配到邮件末尾,而不是当前字段的单行内容。

修正后的脚本

var ss = SpreadsheetApp.getActiveSheet(); 
var label = GmailApp.getUserLabelByName("Exclusion Check");
var threads = label.getThreads();

for (var i=0; i<threads.length; i++) { // 改为遍历所有带标签的邮件线程
  var messages = threads[i].getMessages();

  for (var j=0; j<messages.length; j++) {
    var content = messages[j].getPlainBody();
    if (content) {
      var tmp;
      // 匹配Account:修正空格,捕获当前行内容
      tmp = content.match(/Account : ([^\r\n]+)/);
      var account = (tmp && tmp[1]) ? tmp[1].trim() : 'NULL';

      // 匹配Address:同样修正空格,限制到单行
      tmp = content.match(/Address : ([^\r\n]+)/);
      var address = (tmp && tmp[1]) ? tmp[1].trim() : 'NULL';

      // 匹配你给出的邮件里的Mail Id字段
      tmp = content.match(/Mail Id : ([^\r\n]+)/);
      var mailId = (tmp && tmp[1]) ? tmp[1].trim() : 'NULL';

      // 匹配你给出的邮件里的Id字段
      tmp = content.match(/Id : ([^\r\n]+)/);
      var id = (tmp && tmp[1]) ? tmp[1].trim() : 'NULL';

      // 若实际邮件存在以下字段,按同样格式修正正则即可
      tmp = content.match(/MDM ID : ([^\r\n]+)/);
      var mdmId = (tmp && tmp[1]) ? tmp[1].trim() : 'NULL';

      tmp = content.match(/NPI ID : ([^\r\n]+)/);
      var npiId = (tmp && tmp[1]) ? tmp[1].trim() : 'NULL';

      tmp = content.match(/Active State Licenses : ([^\r\n]+)/);
      var activeStateLicenses = (tmp && tmp[1]) ? tmp[1].trim() : 'NULL';

      tmp = content.match(/Requested by : ([^\r\n]+)/);
      var requestedBy = (tmp && tmp[1]) ? tmp[1].trim() : 'NULL';

      tmp = content.match(/Requestor e-mail : ([^\r\n]+)/);
      var email = (tmp && tmp[1]) ? tmp[1].trim() : 'NULL';
      
      var sub = messages[j].getSubject();
      var dat = messages[j].getDate();

      // 按需求调整列顺序后写入表格
      ss.appendRow([account, address, mailId, id, mdmId, npiId, activeStateLicenses, requestedBy, email, sub, dat])
    }
  }
  // threads[i].removeLabel(label); // 测试无误后可取消注释,移除已处理邮件的标签
}

关键修改说明

  1. 正则匹配修正:所有字段的正则都补上了冒号后的空格(Account :),并用([^\r\n]+)仅捕获当前行内容,避免匹配到后续无关文本。
  2. 字段对应修正:根据你提供的邮件格式,新增了Mail Id和Id的匹配逻辑,若实际邮件有其他字段,只需复制该格式修改正则即可。
  3. 遍历逻辑优化:把i<1改为i<threads.length,这样会处理所有带目标标签的邮件线程,而非仅处理第一个。

内容的提问来源于stack exchange,提问作者Parmeet Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 08:30:46