选择单个电子邮件而不是整个主题

时间:2019-04-19 00:40:25

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

我有一个脚本,可以将我的电子邮件正文从Gmail导入到Google工作表单元格中,基本上,我搜索已加星标的电子邮件,并在结束时将其带入我取消加星标的位置(下次运行时不应再次输入时间)。但是我遇到了一个问题,那就是它包含了电子邮件的整个线程。需要说明的是:我的gmail设置设为“会话视图关闭”,这就是我在收件箱中看到的情况(每个味精分别),但是看起来在Gmail API中它仍然存储为一个长线程... 如何在不使用整个线程的情况下仅导入一个味精? (该线程不是真正的对话,它只是来自同一发件人和同一主题的一封自动发送的电子邮件,这就是为什么Gmail将该线程视为一个线程,因此,如果有办法阻止它,那也将有所帮助。)

我的代码在下面。

var SEARCH_QUERY = "label:web is:unread to:me is:starred";

function getEmails_(q) {
var emails = [];
emails.length = 0;
var threads = GmailApp.search(q);
for (var i in threads) {
var msgs = threads[i].getMessages();
for (var j in msgs) {
emails.push([msgs[j].getPlainBody().replace(/<.*?>/g, '\n')
.replace(/^\s*\n/gm, '').replace(/^\s*/gm, '').replace(/\s*\n/gm, '\n')]);

msgs[j].unstar().refresh();
}
}
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.getActiveSpreadsheet().getSheetByName('Web 
Email'), array2d);
}
}

1 个答案:

答案 0 :(得分:0)

看看GmailApp documentation -包含对可用方法及其返回对象类型的说明。您正在尝试获取GmailMessage对象,但是GmailApp.search()会按设计返回一组GmailThread对象。我不认为可以在Gmail中搜索特定的邮件-正如您的代码所示,您可以使用getMessages()获取特定的邮件来获取搜索返回的线程数组并在其中循环。