【问题标题】:How do I pull the contents of a thread matching search criteria into a Google sheet?如何将匹配搜索条件的线程内容提取到 Google 工作表中?
【发布时间】:2019-06-26 21:24:14
【问题描述】:

我目前有一个运行电子表格的 Google Apps 脚本,可以提取我正在查询的正确电子邮件。但是,当我实际尝试在实际电子邮件对话中提取线程回复时,我只能获取原始电子邮件正文内容。

有谁知道这是否可能或如何去做?

我当前的脚本仅从搜索查询中提取初始电子邮件,但这不是本意。

function myFunction() {
  // Use sheet
  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  // Gmail query
  var query = "subject:Attendance Shed";
  // Search in Gmail, bind to array
  var threads = GmailApp.search(query);
  // Loop through query results
  for (var i = 0; i < threads.length; i++)
  {
    // Get messages in thread, add to array
    var messages = threads[i].getMessages();

    // Used to find max index in array
    var max = messages[0];
    var maxIndex = 0;

    // Loop through array to find maxIndexD = most recent mail
    for (var j = 0; j < messages.length; j++) {
      if (messages[j] > max) {
        maxIndex = j;
        max = messages[j];
      }
    } 
    // Find data
    var mId = messages[maxIndex].getId() // ID used to create mail link
    var from = messages[maxIndex].getFrom();
    var cc = messages[maxIndex].getCc();
    var time = threads[i].getLastMessageDate()
    var sub = messages[maxIndex].getSubject();
    // Write data to sheet
    ss.appendRow([from, cc, time, sub, 'https://mail.google.com/mail/u/0/#inbox/'+mId])
  }
}

我希望它能够使用给定的搜索查询检索特定线程并将其输出到电子表格。目前它只提取初始电子邮件。

【问题讨论】:

  • 当您检查if (messages[j] &gt; max) 时,您正在比较两个消息对象,它不会检查它们的顺序。如果您尝试遍历线程,您可以通过删除 maxIndex 循环来完成,您可以遍历该循环中的所有消息并从那里附加它们。现在你的appendRow 每个线程只被调用一次。

标签: google-apps-script google-sheets gmail


【解决方案1】:

var messages = threads[i].getMessages(); 行之后尝试此代码:

…

for (var j = 0; j < messages.length; j++) {
    // Find data
    var mId = messages[j].getId() // ID used to create mail link
    var from = messages[j].getFrom();
    var cc = messages[j].getCc();
    var time = threads[i].getLastMessageDate()
    var sub = messages[j].getSubject();
    // Write data to sheet
    ss.appendRow([from, cc, time, sub, 'https://mail.google.com/mail/u/0/#inbox/' + mId])
}
ss.appendRow();

这将获取每条消息的信息,然后在每个线程之间附加一个空行。

【讨论】:

    猜你喜欢
    • 2020-04-04
    • 2010-11-09
    • 1970-01-01
    • 2019-08-12
    • 2020-01-10
    • 2018-04-16
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    相关资源
    最近更新 更多