Google apps script 谷歌应用脚本Gmail无需对话即可获取消息

Google apps script 谷歌应用脚本Gmail无需对话即可获取消息,google-apps-script,gmail,Google Apps Script,Gmail,我正在尝试使用谷歌应用程序脚本将我在特定标签下的电子邮件转储到谷歌文档电子表格。我想在一个线程中将每个电子邮件正文作为一个单独的行列出,这样,如果一个线程有9条消息的链,那么每一条消息都会在一行中单独列出(没有链) function getEmails() { clearCanvas(); var label = GmailApp.getUserLabelByName(LabelWithEmails); var threads = label.getThreads(); //

我正在尝试使用谷歌应用程序脚本将我在特定标签下的电子邮件转储到谷歌文档电子表格。我想在一个线程中将每个电子邮件正文作为一个单独的行列出,这样,如果一个线程有9条消息的链,那么每一条消息都会在一行中单独列出(没有链)

function getEmails() {
  clearCanvas();
  var label = GmailApp.getUserLabelByName(LabelWithEmails);
  var threads = label.getThreads();

  // var threads = GmailApp.getInboxThreads(0, 50);
  var row = getFirstRow() + 1;
  var firstmessageId = getfirstmsgid();
  UserProperties.setProperty("firstmsgid", firstmessageId);
  spreadsheet.toast("Loading emails..Please wait. It could take few seconds", "Status", -1);

  var messages = GmailApp.getMessagesForThreads(threads); //gets messages in 2D array
  for (i = 0; i < 5; ++i)
  {
   try {
       j = messages[i].length; //to process most recent conversation in thread (contains messages from previous conversations as well, reduces redundancy
       messageBody = messages[i][j-1].getBody(); //gets body of message in HTML
       messageSubject = messages[i][j-1].getSubject();
       messageDate = messages[i][j-1].getDate();
       messageFrom = messages[i][j-1].getFrom();

       Logger.log("Message Subject:" + messageSubject);
       Logger.log("Message Date:" + messageDate);
       Logger.log("Message From:" + messageFrom);

       sheet.getRange(row, 1).setValue(messageFrom);
       sheet.getRange(row, 2).setValue(messageSubject);
       sheet.getRange(row, 3).setValue(messageDate);
       sheet.getRange(row, 4).setValue(getTextFromHtml(messageBody));
       row++;
    } catch (error) {
        spreadsheet.toast("Error Occured. Report it @ http://techawakening.org/", "Status", -1);
    }

    if (i == threads.length - 1) {
        spreadsheet.toast("Successfully loaded emails.", "Status", -1);
        spreadsheet.toast("Now mark emails to be forwarded by changing the background color of the cells to green. Then select Forward->Forward selected emails", "Status", -1);
    }

  }
}
function getEmails() {
clearCanvas();
var label = GmailApp.getUserLabelByName(LabelWithEmails);
var threads = label.getThreads();

// var threads = GmailApp.getInboxThreads(0, 50);
var row = getFirstRow() + 1;
var firstmessageId = getfirstmsgid();
UserProperties.setProperty("firstmsgid", firstmessageId);
spreadsheet.toast("Loading emails..Please wait. It could take few seconds", "Status", -1);

var messages = GmailApp.getMessagesForThreads(threads); //gets messages in 2D array
// messages.length
// jknipp - working except it keeps the thread chain
for (var i = 0; i < threads.length; i++) {
    try {
        var messages = threads[i].getMessages();
        for (var m = 0; m < messages.length; m++) {
            sheet.getRange(row, 1).setValue(messages[m].getFrom());
            sheet.getRange(row, 2).setValue(messages[m].getSubject());
            sheet.getRange(row, 3).setValue(messages[m].getDate());
            sheet.getRange(row, 4).setValue(getTextFromHtml(messages[m].getBody()));

            row++;
        }
    } catch (error) {
        spreadsheet.toast("Error Occured. Report it @ http://techawakening.org/", "Status", -1);
    }

    if (i == threads.length - 1) {
        spreadsheet.toast("Successfully loaded emails.", "Status", -1);
        spreadsheet.toast("Now mark emails to be forwarded by changing the background color of the cells to green. Then select Forward->Forward selected emails", "Status", -1);
    }
  }
}
我已经把它放到了一个单元格中,每个消息体+它之前的整个线程都存储在一个单元格中,我可以在一个单元格中获得整个线程。但这不是我想要的

此代码将把整个线程体放在一行中

function getEmails() {
  clearCanvas();
  var label = GmailApp.getUserLabelByName(LabelWithEmails);
  var threads = label.getThreads();

  // var threads = GmailApp.getInboxThreads(0, 50);
  var row = getFirstRow() + 1;
  var firstmessageId = getfirstmsgid();
  UserProperties.setProperty("firstmsgid", firstmessageId);
  spreadsheet.toast("Loading emails..Please wait. It could take few seconds", "Status", -1);

  var messages = GmailApp.getMessagesForThreads(threads); //gets messages in 2D array
  for (i = 0; i < 5; ++i)
  {
   try {
       j = messages[i].length; //to process most recent conversation in thread (contains messages from previous conversations as well, reduces redundancy
       messageBody = messages[i][j-1].getBody(); //gets body of message in HTML
       messageSubject = messages[i][j-1].getSubject();
       messageDate = messages[i][j-1].getDate();
       messageFrom = messages[i][j-1].getFrom();

       Logger.log("Message Subject:" + messageSubject);
       Logger.log("Message Date:" + messageDate);
       Logger.log("Message From:" + messageFrom);

       sheet.getRange(row, 1).setValue(messageFrom);
       sheet.getRange(row, 2).setValue(messageSubject);
       sheet.getRange(row, 3).setValue(messageDate);
       sheet.getRange(row, 4).setValue(getTextFromHtml(messageBody));
       row++;
    } catch (error) {
        spreadsheet.toast("Error Occured. Report it @ http://techawakening.org/", "Status", -1);
    }

    if (i == threads.length - 1) {
        spreadsheet.toast("Successfully loaded emails.", "Status", -1);
        spreadsheet.toast("Now mark emails to be forwarded by changing the background color of the cells to green. Then select Forward->Forward selected emails", "Status", -1);
    }

  }
}
function getEmails() {
clearCanvas();
var label = GmailApp.getUserLabelByName(LabelWithEmails);
var threads = label.getThreads();

// var threads = GmailApp.getInboxThreads(0, 50);
var row = getFirstRow() + 1;
var firstmessageId = getfirstmsgid();
UserProperties.setProperty("firstmsgid", firstmessageId);
spreadsheet.toast("Loading emails..Please wait. It could take few seconds", "Status", -1);

var messages = GmailApp.getMessagesForThreads(threads); //gets messages in 2D array
// messages.length
// jknipp - working except it keeps the thread chain
for (var i = 0; i < threads.length; i++) {
    try {
        var messages = threads[i].getMessages();
        for (var m = 0; m < messages.length; m++) {
            sheet.getRange(row, 1).setValue(messages[m].getFrom());
            sheet.getRange(row, 2).setValue(messages[m].getSubject());
            sheet.getRange(row, 3).setValue(messages[m].getDate());
            sheet.getRange(row, 4).setValue(getTextFromHtml(messages[m].getBody()));

            row++;
        }
    } catch (error) {
        spreadsheet.toast("Error Occured. Report it @ http://techawakening.org/", "Status", -1);
    }

    if (i == threads.length - 1) {
        spreadsheet.toast("Successfully loaded emails.", "Status", -1);
        spreadsheet.toast("Now mark emails to be forwarded by changing the background color of the cells to green. Then select Forward->Forward selected emails", "Status", -1);
    }
  }
}
函数getEmails(){ clearCanvas(); var label=GmailApp.getUserLabelByName(LabelWithEmails); var threads=label.getThreads(); //var threads=GmailApp.getInboxThreads(0,50); var row=getFirstRow()+1; var firstmessageId=getfirstmsgid(); setProperty(“firstmsgid”,firstmessageId); 电子表格.toast(“加载电子邮件..请稍候。可能需要几秒钟”,“状态”,-1); var messages=GmailApp.getMessagesForThreads(线程);//获取2D数组中的消息 对于(i=0;i<5;++i) { 试一试{ j=messages[i].length;//处理线程中最近的会话(也包含来自以前会话的消息,减少了冗余) messageBody=messages[i][j-1].getBody();//获取HTML格式的消息体 messageSubject=messages[i][j-1].getSubject(); messageDate=messages[i][j-1].getDate(); messageFrom=messages[i][j-1].getFrom(); Logger.log(“消息主题:+messageSubject”); Logger.log(“消息日期:+messageDate”); Logger.log(“消息来源:”+messageFrom); sheet.getRange(第1行).setValue(messageFrom); sheet.getRange(第2行).setValue(messageSubject); sheet.getRange(第3行).setValue(messageDate); sheet.getRange(第4行).setValue(getTextFromHtml(messageBody)); 行++; }捕获(错误){ 电子表格.toast(“发生错误。报告它@http://techawakening.org/“,”状态“,-1); } 如果(i==threads.length-1){ toast(“已成功加载电子邮件”,“状态”,-1); 电子表格.toast(“现在通过将单元格背景颜色更改为绿色来标记要转发的电子邮件。然后选择转发->转发所选电子邮件”,“状态”,-1); } } } 这将把每个消息体(包括它以前的线程/消息链)放在一行中

function getEmails() {
  clearCanvas();
  var label = GmailApp.getUserLabelByName(LabelWithEmails);
  var threads = label.getThreads();

  // var threads = GmailApp.getInboxThreads(0, 50);
  var row = getFirstRow() + 1;
  var firstmessageId = getfirstmsgid();
  UserProperties.setProperty("firstmsgid", firstmessageId);
  spreadsheet.toast("Loading emails..Please wait. It could take few seconds", "Status", -1);

  var messages = GmailApp.getMessagesForThreads(threads); //gets messages in 2D array
  for (i = 0; i < 5; ++i)
  {
   try {
       j = messages[i].length; //to process most recent conversation in thread (contains messages from previous conversations as well, reduces redundancy
       messageBody = messages[i][j-1].getBody(); //gets body of message in HTML
       messageSubject = messages[i][j-1].getSubject();
       messageDate = messages[i][j-1].getDate();
       messageFrom = messages[i][j-1].getFrom();

       Logger.log("Message Subject:" + messageSubject);
       Logger.log("Message Date:" + messageDate);
       Logger.log("Message From:" + messageFrom);

       sheet.getRange(row, 1).setValue(messageFrom);
       sheet.getRange(row, 2).setValue(messageSubject);
       sheet.getRange(row, 3).setValue(messageDate);
       sheet.getRange(row, 4).setValue(getTextFromHtml(messageBody));
       row++;
    } catch (error) {
        spreadsheet.toast("Error Occured. Report it @ http://techawakening.org/", "Status", -1);
    }

    if (i == threads.length - 1) {
        spreadsheet.toast("Successfully loaded emails.", "Status", -1);
        spreadsheet.toast("Now mark emails to be forwarded by changing the background color of the cells to green. Then select Forward->Forward selected emails", "Status", -1);
    }

  }
}
function getEmails() {
clearCanvas();
var label = GmailApp.getUserLabelByName(LabelWithEmails);
var threads = label.getThreads();

// var threads = GmailApp.getInboxThreads(0, 50);
var row = getFirstRow() + 1;
var firstmessageId = getfirstmsgid();
UserProperties.setProperty("firstmsgid", firstmessageId);
spreadsheet.toast("Loading emails..Please wait. It could take few seconds", "Status", -1);

var messages = GmailApp.getMessagesForThreads(threads); //gets messages in 2D array
// messages.length
// jknipp - working except it keeps the thread chain
for (var i = 0; i < threads.length; i++) {
    try {
        var messages = threads[i].getMessages();
        for (var m = 0; m < messages.length; m++) {
            sheet.getRange(row, 1).setValue(messages[m].getFrom());
            sheet.getRange(row, 2).setValue(messages[m].getSubject());
            sheet.getRange(row, 3).setValue(messages[m].getDate());
            sheet.getRange(row, 4).setValue(getTextFromHtml(messages[m].getBody()));

            row++;
        }
    } catch (error) {
        spreadsheet.toast("Error Occured. Report it @ http://techawakening.org/", "Status", -1);
    }

    if (i == threads.length - 1) {
        spreadsheet.toast("Successfully loaded emails.", "Status", -1);
        spreadsheet.toast("Now mark emails to be forwarded by changing the background color of the cells to green. Then select Forward->Forward selected emails", "Status", -1);
    }
  }
}
函数getEmails(){ clearCanvas(); var label=GmailApp.getUserLabelByName(LabelWithEmails); var threads=label.getThreads(); //var threads=GmailApp.getInboxThreads(0,50); var row=getFirstRow()+1; var firstmessageId=getfirstmsgid(); setProperty(“firstmsgid”,firstmessageId); 电子表格.toast(“加载电子邮件..请稍候。可能需要几秒钟”,“状态”,-1); var messages=GmailApp.getMessagesForThreads(线程);//获取2D数组中的消息 //消息长度 //jknipp-工作,但它保持线程链 对于(var i=0;i转发所选电子邮件”,“状态”,-1); } } } 参考资料

这是一个“垃圾输入,垃圾输出”的例子。当你在线程视图中使用gmail应用程序时,谷歌的服务器正在解析电子邮件正文,并巧妙地隐藏旧邮件正文。这使得线程中的最新邮件似乎只包含该邮件的新行,并且你有一个“链”较小的消息

这是一种错觉。线程中的最后一条消息通常首先包含新内容,然后是以前所有消息正文的内容,作为单个消息正文。不同的电子邮件服务和客户端对此使用不同的模式


您需要能够识别线程中以前消息的内容在当前消息正文中表示的大部分或所有方式,并使用这些方式仅提取新内容。

通过识别“以前的对话”的开始位置,我只能提取电子邮件正文

var sheet = SpreadsheetApp.getActiveSheet();
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var LabelWithEmails = sheet.getRange(3, 2).getValue();

function getEmails() {
    clearCanvas();
    var label = GmailApp.getUserLabelByName(LabelWithEmails);
    var threads = label.getThreads();

    var row = getFirstRow() + 1;
    var firstmessageId = getfirstmsgid();
    UserProperties.setProperty("firstmsgid", firstmessageId);
    spreadsheet.toast("Loading emails..Please wait. It could take few seconds", "Status", -1);

    var messages = GmailApp.getMessagesForThreads(threads); //gets messages in 2D array

    for (var i = 0; i < 2;/*threads.length;*/ i++) {
        try {
            var messages = threads[i].getMessages();

            for (var m = 0; m < messages.length; m++) {
                var msg = messages[m];
                var isForward = msg.getBody().search(/---------- Forwarded message/i) != -1;

                if(!isValidMessage) continue;

                sheet.getRange(row, 1).setValue(msg.getFrom());
                sheet.getRange(row, 2).setValue(msg.getTo() + ";" + msg.getCc() + ";" + msg.getBcc());
                sheet.getRange(row, 3).setValue(msg.getSubject());
                sheet.getRange(row, 4).setValue(msg.getDate());

                if(!isForward) {
                    // Get only this messages body, ignore the previous chain
                    var body = msg.getBody();
                    var firstIndexOfThread = body.search(/gmail_quote/i); 
                    body = (firstIndexOfThread == -1) ? body : body.substring(0, firstIndexOfThread);

                        sheet.getRange(row, 5).setValue(getTextFromHtml(body));

                } else {
                    // Use the whole body if its a forward
                    sheet.getRange(row, 5).setValue(getTextFromHtml(msg.getBody()));
                    sheet.getRange(row, 6).setValue("***");
                }

            row++;
        }
    } catch (error) {
            Logger.log(error);
        spreadsheet.toast("Error Occured - please see the logs.", "Status", -1);
    }

    if (i == threads.length - 1) {
        spreadsheet.toast("Successfully loaded emails.", "Status", -1);
    }
  }
}
var sheet=SpreadsheetApp.getActiveSheet();
var电子表格=SpreadsheetApp.getActiveSpreadsheet();
var LabelWithEmails=sheet.getRange(3,2).getValue();
函数getEmails(){
clearCanvas();
var label=GmailApp.getUserLabelByName(LabelWithEmails);
var threads=label.getThreads();
var row=getFirstRow()+1;
var firstmessageId=getfirstmsgid();
setProperty(“firstmsgid”,firstmessageId);
电子表格.toast(“加载电子邮件..请稍候。可能需要几秒钟”,“状态”,-1);
var messages=GmailApp.getMessagesForThreads(线程);//获取2D数组中的消息
对于(var i=0;i<2;/*threads.length;*/i++){
试一试{
var messages=threads[i].getMessages();
for(var m=0;m