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