【问题标题】:Extract all messages in thread from gmail into a spreadsheet从gmail中提取线程中的所有消息到电子表格中
【发布时间】:2021-02-09 03:40:28
【问题描述】:

我正在尝试使用此代码从我的收件箱中提取求职者数据并填充 Google 表格。这很容易,但问题是应用程序首先由我们的网站插件处理,然后发送到我的收件箱。这会将发件人更改为相同的地址。 Google 将每个收件人添加到同一个线程,然后阻止代码从每个到达的应用程序中提取信息。

目前,正在检索每条消息的第一条。我知道我需要实现一个循环来遍历线程,但到目前为止我还没有运气。

在此处注明我的原始代码源here

这是目前为止的代码:

此函数将过滤器、解析后的内容传递到活动工作表。

function gather() {
    var messages = getGmail();
    var curSheet = SpreadsheetApp.getActive();
    messages.forEach(message => {curSheet.appendRow(parseEmail(message))});
}

我认为它在其中一个函数中的某个地方需要合并一个循环来收集线程中的所有消息

    function getGmail() {
        const query = "from:noreply-careers@smooth.ie ";
    
        let threads = GmailApp.search(query);
    
        //let label = GmailApp.getUserLabelByName("done");
        //if (!label) {label = GmailApp.createLabel("done")}
    
        let messages = [];
    
        threads.forEach(thread => {
            messages.push(thread.getMessages()[0].getPlainBody());
            
        });
    
        return messages;
    }

具体来说,我一直专注于在线程中包含一个循环和消息:

    threads.forEach(thread => {
        messages.push(thread.getMessages()[0].getPlainBody());

我确实尝试过这样的事情,但我无法让它工作。

function getGmails_(query) {
    var emails = [];
    var threads = GmailApp.search(query);
    for (var i in threads) {
        var msgs = threads[i].getMessages();
        for (var j in msgs) {
            emails.push([msgs[j].getPlainBody().replace(/\n*\s.+:/,',')
            .replace(/\n*.+:/g,',')
            .replace(/^,/,'')
            .replace(/\n/g,'')
            .split(',')
          ]);
        
        }
    } 
  
    return result;
}

剩余的代码正在运行一些正则表达式,以从消息正文中提取申请人的答案,并封装在索引中以传递到工作表中的列。

function parseEmail(message){
    var parsed = message.replace(/,/g,'')
        .replace(/\n*.+:/g,',')
        .replace(/^,/,'')
        .replace(/\n/g,'')
        .split(',');

    var result = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22].map(index => parsed[index]);

    return result;
    
}

【问题讨论】:

    标签: javascript parsing google-apps-script google-sheets extract


    【解决方案1】:

    如果您只想在单个数组中检索所有线程中所有消息的普通正文,您可以这样做:

    • 对于在GmailThread.getMessages() 中返回的每条消息,使用map 为这些消息中的每条返回一个包含相应纯正文的数组。
    • 使用push 将当前线程消息的纯正文添加到主messages 数组中。

    代码sn-p:

    threads.forEach(thread => {
      const threadMessages = thread.getMessages().map(message=>message.getPlainBody());
      messages.push(...threadMessages);
    });
    

    【讨论】:

      猜你喜欢
      • 2020-06-30
      • 2014-07-12
      • 1970-01-01
      • 1970-01-01
      • 2021-06-04
      • 2017-09-21
      • 2015-12-29
      • 2010-11-18
      • 1970-01-01
      相关资源
      最近更新 更多