如何检查Gmail线程以回复电子邮件

时间:2017-06-14 13:38:38

标签: google-apps-script google-sheets

我正在创建一个基本的CRM,需要在回复线程时进行标记。

我创建了一个脚本,可以从一个工作表中的电子邮件列表中扫描我的收件箱中的线程,检查每个线程中的最后一条消息并收集.getFrom以查看我是否是最后一个回复。

但是,我无法弄清楚如何检查整个帖子中是否有联系人的回复。

这是检查最后一条消息的脚本。 (如果缺少任何引用,它是较大脚本的摘录):

Example Sheet

function UpdateStatus() { 
 // Connect to our active sheet and collect all of our email addresses in column G
 var sheet = SpreadsheetApp.getActiveSheet();
 var totalRows = sheet.getLastRow();
 var range = sheet.getRange(2, COLUMN_WITH_EMAIL_ADDRESSES, totalRows, 1);
 var emails = range.getValues();

 // Attempt to iterate through 100 times (although we'll timeout before this)
    for (var cntr = 0; cntr<100; cntr++ ) {

 // If we've reached the end of our last, wrap to the front
    if (lastRowProcessed >= totalRows) lastRowProcessed = 1;

 // Increment the row we're processing
    var currentRow = lastRowProcessed+1;

 // Get the email address from the current row
    var email = emails[currentRow-2][0];

 // If the email address field is empty, skip to the next row
    if (!email) {
     lastRowProcessed = currentRow;
     cache.put("lastRow", currentRow, 60*60*24); 
     continue;
} 

 // Look for all threads from me to this person
    var threads = GmailApp.search('from:me to:'+email);

   // If there are no threads, I haven't emailed them before
      if (threads.length == 0) {

       // Update the spreadsheet row to show we've never emailed
        var range = sheet.getRange(currentRow,13, 1, 4 ).setValues([["NEVER", "", "", ""]] );

       //  And carry on
          lastRowProcessed = currentRow;
          cache.put("lastRow", currentRow, 60*60*24); // cache for 25 minutes    
          continue;
       }

   // Beyond a reasonable doubt
    var latestDate = new Date(1970, 1, 1);

    var starredMsg = "";
    var iReplied = ""

   // Iterate through each of the message threads returned from our search
    for (var thread in threads) {

  // Grab the last message date for this thread
  var threadDate = threads[thread].getLastMessageDate();

  // If this is the latest thread we've seen so far, make note!
  if (threadDate > latestDate) {

    latestDate = threadDate;

    // Check to see if we starred the message (we may be back to overwrite this)
    if (threads[thread].hasStarredMessages()) {
      starredMsg = "★";
    } else {
      starredMsg = "";
    }    

    // Open the thread to get messages
    var messages = threads[thread].getMessages();

    // See who was the last to speak
    var lastMsg = messages[messages.length-1];
    var lastMsgFrom = lastMsg.getFrom();

    // Use regex so we can make our search case insensitive
    var re = new RegExp(email,"i");

    // If we can find their email address in the email address from the last message, they spoke last
    // (we may be back to overwrite this)
    if (lastMsgFrom.search(re) >= 0) {
      iReplied = "NO";
    } else {
      iReplied = "YES";
    }       
  }

0 个答案:

没有答案