2015-06-10 55 views
2

我正在嘗試製作一個腳本,它將某個標籤中的電子郵件放入Google表格中。我使用這個功能的時刻:將具有特定Gmail標籤的電子郵件複製到電子表格中,無需複製

function getMessagesWithLabel() { 
var destArray = new Array(); 
    var threads = GmailApp.getUserLabelByName('Facebook').getThreads(0,10); 

    for(var n in threads){ 
     var msg = threads[n].getMessages(); 
     var destArrayRow = new Array(); 
     destArrayRow.push('thread has '+threads[n].getMessageCount()+' messages'); 
      for(var m in msg){ 
        destArrayRow.push(msg[m].getSubject()); 
      } 
    destArray.push(destArrayRow);   
     } 
Logger.log(destArray); 
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sh = ss.getActiveSheet(); 
if(ss.getLastRow()==0){sh.getRange(1,1).setValue('getMessagesWithLabel() RESULTS')}; 
sh.getRange(ss.getLastRow()+1,1,destArray.length,destArray[0].length).setValues(destArray) 
} 

這工作,在吸引用戶的「Facebook的」標籤的所有郵件,但抓住每一次所有的電子郵件,創建重複每次運行時。我希望它只是在每次將新內容放入'Facebook'標籤時創建一個新行。

+0

好了新的問題。我應該怎樣才能將郵件正文和日期添加到電子表格中? –

回答

1

四種想法供您探索。

  1. 使用GmailMessage.getDate()來過濾掉已處理的郵件。將腳本運行的時間存儲在ScriptProperties中,並在下次將其重新加載爲閾值。
  2. 每封郵件都有自己的唯一ID,因此記錄下身體會給你一個查找的鑰匙。我認爲這會比第一個選項慢,但如果您將關鍵值存儲在ScriptProperties中,速度會更快。
  3. 使用search()匹配標籤和時間,再次跟蹤腳本在ScriptProperties中的運行時間。

    var threads = GmailApp.search('label:"Facebook" after:"2015/6/1"'); 
    

    這將會給線程與給定日期之後添加的任何消息,但該線也將有消息在該日期之前。您可能仍然需要使用先前的某個選項來過濾掉這些選項。 (除非,正如您在評論中指出的那樣,您的線程將沒有回覆,因此只有一條消息。)

  4. 一旦線程處理完畢,請刪除用於對其進行分類的標籤。

    var oldLabel = GmailApp.getUserLabelByName('Facebook'); 
    var newLabel = GmailApp.getUserLabelByName('Facebook-processed'); 
    var threads = oldLabel.getThreads(0,10); 
    for(var n in threads){ 
        ... 
        threads[n].removeLabel(oldLabel).addLabel(newLabel); 
    } 
    
+0

只需添加更多信息。每個收到的電子郵件都是一個工作單,並且沒有任何迴應。目前,我只是將工作訂單複製到一個Google文檔中,我想要發生的事情是將它轉到一個合併腳本可以使其成爲文檔的電子表格中(我已經完成了該部分)。 –

+0

太棒了,然後選項3應該爲你工作出色,因爲線程將只有一條消息。您也可以在處理完消息後刪除標籤,並保留代碼的其餘部分。 – Mogsdad

+0

var threads = GmailApp.search('label:「Facebook」:「2015/6/1」')之後如何?用於過濾已經導出的消息? –