开发者问题收集

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

2017-11-02
739

我尝试使用下面的代码,但在尝试运行它时出现错误。它应该使用设置标签查找 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: Cannot read property "length" from undefined. (line 20, file "test")

如能提供任何帮助,我们将不胜感激。谢谢。

2个回答

乍一看, array2d 似乎不是一个二维数组,而是一个简单数组,它会因 array2d[0].length 而抛出。您的 getEmails_() 似乎只是返回一个字符串数组,因为您只是将正文推送到 emails 数组

Vytautas
2017-11-03

我已设法让下面的代码完成我最初尝试执行的操作,因此我想我会分享此代码,以便其他人可以实现我尝试执行的操作。您需要做的就是插入要搜索的 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);
  }
}
Martyn
2017-11-06