列出电子邮件到电子表格的所有标签
问题描述:
我的电子邮件通常分配了多个标签。我喜欢搜索具有特定标签的电子邮件,然后将其列入电子表格并显示也分配给电子邮件的所有其他标签。列出电子邮件到电子表格的所有标签
这里是我到目前为止,无法弄清楚如何获得其他标签...
function myFunction() {
var ss = SpreadsheetApp.getActiveSheet();
var threads = GmailApp.search("label:Test");
for (var i=0; i<threads.length; i++)
{
var messages = threads[i].getMessages();
for (var j=0; j<messages.length; j++)
{
var sub = messages[j].getSubject();
var from = messages[j].getFrom();
var dat = messages[j].getDate();
ss.appendRow([dat, sub, from])
}
}
}
答
至于Google Apps脚本而言,Gmail标签应用到线程,而不是个人消息。 (还有其他的情况下,这不一定是真实的,作为Web Apps post细节)。
所以,你应该使用Thread对象的getLabels
方法。然后构造输出以便每行对应一个线程而不是消息是有意义的。这是我在下面做的。该脚本从每个线程中的第一条消息获取主题/来自/日期。第四列是逗号分隔的标签列表,除了您要搜索的列表。
function myFunction() {
var sheet = SpreadsheetApp.getActiveSheet();
var search_label = 'Test';
var threads = GmailApp.search('label:' + search_label);
var output = [];
for (var i=0; i < threads.length; i++) {
var firstMessage = threads[i].getMessages()[0];
var sub = firstMessage.getSubject();
var from = firstMessage.getFrom();
var dat = firstMessage.getDate();
var labels = threads[i].getLabels();
var otherLabels = [];
for (var j = 0; j < labels.length; j++) {
var labelName = labels[j].getName();
if (labelName != search_label) {
otherLabels.push(labelName);
}
}
output.push([dat, sub, from, otherLabels.join(', ')]);
}
sheet.getRange(1, 1, output.length, output[0].length).setValues(output);
}
我不喜欢一次添加一行,而不是收集双阵列output
并立即将其插入所有。当然,您可以像脚本中一样使用appendRow
。那么你不一定需要用逗号分隔的列表,
sheet.appendRow([dat, sub, from].concat(otherLabels));
会工作。