首页 > 解决方案 > 仅将原始 gmail 消息传输到 google 表格而不是回复

问题描述

我有以下脚本,它在我的 gmail 中搜索某个查询,然后将其导入谷歌表格。它似乎有效,但它也会导入对我不想包含的原始电子邮件的回复。有没有办法可以修改我的脚本,使其仅显示原始电子邮件,而不显示其他人可能添加的任何回复?非常感谢。

var SEARCH_QUERY = "newer_than:1d from:contactcentrequeries AND subject:feedback";

/*
 Credit: Alexander Ivanov
 https://gist.github.com/contributorpw/70e04a67f1f5fd96a708
*/

function getEmails_(q) {
    var emails = [];
    var threads = GmailApp.search(q);
    for (var i in threads) {
        var msgs = threads[i].getMessages();
        for (var j in msgs) {
             emails.push([msgs[j].getBody().replace(/<.+?>/g, '\n')
                .replace(/^\s*\n/gm, '').replace(/^\s*/gm, '').replace(/\s*\n/gm, '\n')
            ]);
        }
    }
    return emails;
}

function appendData_(sheet, array2d) {
    sheet.getRange(sheet.getLastRow() + 1, 1, array2d.length, array2d[0].length).setValues(array2d);
}

function saveEmails() {
    var array2d = getEmails_(SEARCH_QUERY);
    if (array2d) {
        appendData_(SpreadsheetApp.getActiveSheet(), array2d);
    }
}

标签: google-apps-scriptgoogle-sheetsgmail

解决方案


根据您提供的代码,问题似乎与您调用msgs变量的方式有关。更准确地说,这行threads[i].getMessages();代码将检索. thread i如果您只想获取线程的第一条消息 - 本质上是原始电子邮件,您应该简单地使用msgs[0]而不是另一个for循环。

因此,您的代码应如下所示:

for (var i in threads) {
  var msgs = threads[i].getMessages();
  emails.push([
    msgs[0]
      .getBody()
      .replace(/<.+?>/g, "\n")
      .replace(/^\s*\n/gm, "")
      .replace(/^\s*/gm, "")
      .replace(/\s*\n/gm, "\n")
  ]);
}

参考


推荐阅读