首页 > 解决方案 > Gmail 应用脚本 - 从 Gmail 标签而不是 Gmail 收件箱中提取电子邮件内容

问题描述

我有一个在线表单,可以将提交的表单字段数据发送到 Gmail。我一直在使用下面的脚本将表单字段数据提取到 Google 表格中。目前,脚本从收件箱中提取。我想知道是否有办法调整脚本,使其查看 Gmail 标签(例如:formsubmissions)而不是收件箱。

function parseEmailMessages(start) {

  start = start || 0;

  var threads = GmailApp.getInboxThreads(start, 100);
  var sheet = SpreadsheetApp.getActiveSheet();

  for (var i = 0; i < threads.length; i++) {

    // Get the first email message of a threads
    var tmp,
      message = threads[i].getMessages()[0],
      subject = message.getSubject(),
      content = message.getPlainBody();

    // Get the plain text body of the email message
    // You may also use getRawContent() for parsing HTML

    // Implement Parsing rules using regular expressions
    if (content) {

      tmp = content.match(/First:\s*([A-Za-z0-9!"?`?|õüö’çëÅíšÃÉÁÇÃáéñãóú#&;()-,'@./\s\-]+)(\r?\n)/);
      var first = (tmp && tmp[1]) ? tmp[1].trim() : 'BLANK';

      tmp = content.match(/Last:\s*([A-Za-z0-9!"?`?|õüö’çëÅíšÃÉÁÇÃáéñãóú#&;()-,'@./\s\-]+)(\r?\n)/);
      var last = (tmp && tmp[1]) ? tmp[1].trim() : 'BLANK';

      tmp = content.match(/Title:\s*([A-Za-z0-9!"?`?|õüö’çëÅíšÃÉÁÇÃáéñãóú#&;()-,'@./\s\-]+)(\r?\n)/);
      var title = (tmp && tmp[1]) ? tmp[1].trim() : 'BLANK';

      tmp = content.match(/Organization:\s*([A-Za-z0-9!"?`?|õüö’çëÅíšÃÉÁÇÃáéñãóú#&;()-,'@./\s\-]+)(\r?\n)/);
      var organization = (tmp && tmp[1]) ? tmp[1].trim() : 'BLANK';

      tmp = content.match(/City:\s*([A-Za-z0-9!"?`?|õüö’çëÅíšÃÉÁÇÃáéñãóú#&;()-,'@./\s\-]+)(\r?\n)/);
      var city = (tmp && tmp[1]) ? tmp[1].trim() : 'BLANK';

      tmp = content.match(/State:\s*([A-Za-z0-9!"?`?|õüö’çëÅíšÃÉÁÇÃáéñãóú#&;()-,'@./\s\-]+)(\r?\n)/);
      var state = (tmp && tmp[1]) ? tmp[1].trim() : 'BLANK';

      tmp = content.match(/Country:\s*([A-Za-z0-9!"?`?|õüö’çëÅíšÃÉÁÇÃáéñãóú#&;()-,'@./\s\-]+)(\r?\n)/);
      var country = (tmp && tmp[1]) ? tmp[1].trim() : 'BLANK';

      tmp = content.match(/E-mail:\s*([A-Za-z0-9!"?`?|õüö’çëÅíšÃÉÁÇÃáéñãóú#&;()-,'@_.\-]+)/);
      var email = (tmp && tmp[1]) ? tmp[1].trim() : 'BLANK';

      tmp = content.match(/BLANK:\s*([\s\S]+)/);
      var blank = (tmp && tmp[1]) ? tmp[1] : 'BLANK';

      sheet.appendRow([first, last, title, organization, city, state, country, email]);

    } // End if

  } // End for loop
}        

标签: google-apps-scriptgmail

解决方案


  • 您想threadsformsubmissions标签名称中检索标签。

如果我的理解是正确的,那么这个修改呢?我认为您的情况有几个答案。所以请认为这只是其中之一。

修改后的脚本:

请进行如下修改。

从:
var threads = GmailApp.getInboxThreads(start, 100);
至:
var labelName = "formsubmissions"; // Please set the label name
var labels = GmailApp.getUserLabels();
var threads = [];
for (var i = 0; i < labels.length; i++) {
  if (labels[i].getName() == labelName) {
    threads = labels[i].getThreads();
    break;
  }
}

笔记:

  • 修改后的脚本假设下面的脚本var sheet = SpreadsheetApp.getActiveSheet();工作正常。

参考:

如果我误解了你的问题,我很抱歉。


推荐阅读