2016-12-01 76 views
1

我的电子邮件通常分配了多个标签。我喜欢搜索具有特定标签的电子邮件,然后将其列入电子表格并显示也分配给电子邮件的所有其他标签。列出电子邮件到电子表格的所有标签

这里是我到目前为止,无法弄清楚如何获得其他标签...

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]) 
    } 
    } 
} 

回答

1

至于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)); 

会工作。