Gmail到Google表格 - 将邮件放入电子表格并从正文中删除html

时间:2017-11-02 23:34:53

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

我正在尝试使用下面的代码,但在尝试运行时遇到错误。它应该寻找带有设置标签的gmail,然后将电子邮件正文(已经剥离HTML)放入google表格。

var SEARCH_QUERY = "label:inbox is:unread to:me";

// Credit: https://gist.github.com/oshliaer/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);
}
}

我收到错误:

  

TypeError:无法读取属性&#34;长度&#34;来自undefined。 (第20行,文件&#34;测试&#34;)

非常感谢任何帮助。感谢。

2 个答案:

答案 0 :(得分:0)

快速浏览array2d似乎不是一个二维数组,而是一个简单的数组,由于array2d[0].length而抛出。您只需将正文推送到getEmails_()数组

emails似乎只返回一个字符串数组

答案 1 :(得分:0)

我已经设法让下面的代码完成我最初尝试做的事情,所以我想我会分享这个,以便其他人可以实现我想要做的事情。您需要做的就是插入要搜索的Gmail电子邮件标签。我不想将电子邮件主题放入电子表格中,因此我将其从ss.appendRow([dat,msg])行中删除。如果需要,只需将其重新添加即可。 感谢大家的帮助。

function myFunction() {

  var ss = SpreadsheetApp.getActiveSheet();

  var label = GmailApp.getUserLabelByName("GMAIL EMAIL LABEL NAME HERE");
  var threads = label.getThreads();

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

for (var j=0; j<messages.length; j++)
{
  var msg = messages[j].getBody().replace(/<.*?>/g, '\n').replace(/^\s*\n/gm, '').replace(/^\s*/gm, '').replace(/\s*\n/gm, '\n');
  var sub = messages[j].getSubject();
  var dat = messages[j].getDate();

  ss.appendRow([dat, msg])
}
  threads[i].removeLabel(label);
  }
}