2016-12-01 75 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)); 

會工作。