2015-12-13 31 views
1

我將特定標籤的電子郵件導入電子表格,但在每次腳本運行時加載所有電子郵件效率不高。將gmail消息導入電子表格並在下一個腳本運行時只會獲得新消息

我已經搜索和搜索,但找不到解決方案只獲取新消息。

我希望能夠採取的方法是: 檢查電子表格與電子郵件 - >檢查信息量的lastrow。 用新消息追加行(「消息」 - 最後一行)。

我希望有人對此有一個解決方案,這將對我想要創建的定稿產生巨大影響!提前致謝!

我是小白編碼器,但創建下面的腳本來獲取消息的量:

+1

爲什麼不將線程的ID存儲在工作表或PropertiesService中? https://developers.google.com/apps-script/reference/gmail/gmail-thread#getId()如果您抓取的消息的ID已存在於存儲的ID數組中,請跳過該循環中的迭代。 –

+1

感謝您的解決方案!我試試看看哪一個最適合,併發布我的發現! – PdB

回答

0

你可以有一個標籤(比如計算)

function messageCount(){ 

var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1'); 
var label = ss.getRange('A1').getValue().toString(); 

var array = new Array(); 

var threads = GmailApp.search("in:" + label); 

for(var n in threads){ 

var msg = threads[n].getMessages(); 
var threadCount = threads[n].getMessageCount(); 
array.push(threadCount); 

} 

var count = 0; 
for(var i = 0; i < array.length; i++){ 

count = count + array[i]; 
} 
var currentTransactions = count; 
Logger.log(currentTransactions); 

}用於跟蹤處理消息的。將標籤應用於已計數的線程,並在下一次運行中忽略它們。

function messageCount(){ 

    var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1'); 
    var label = ss.getRange('A1').getValue().toString(); 
    var processed = GmailApp.getUserLabelByName("Counted") || GmailApp.createLabel("Counted"); 
    var threads = GmailApp.search("-in:Counted in:" + label); 
    var count = 0; 

    for(var t in threads){  
    count += threads[t].getMessageCount();  
    threads[t].addLabel(processed); 
    } 

    Logger.log(count); 
} 
+0

謝謝阿米特!不得不說,你的網站labnol.org是我的起始頁面:)當我完成我的「應用程序」時,我提交了我的發現。 – PdB

0

我已經使用了不同的解決方案。 我不確定電子郵件ID是否有邏輯順序,所以我認爲唯一合理的做法是按JS時間(毫秒)對電子郵件進行排序。

我所做的是: - 獲取所有電子郵件並將它們轉換爲對象。財產關鍵是JS時間。 - 將所有對象放在工作表 - 下次運行時,檢查工作表中的長度與新郵件批次 之間是否存在差異 - 如果是這樣:oldbatch-newbatch(length)。 - 排序與JS時間 新的陣列 - 符合JS的時間與屬性鍵和執行來自新接收到的消息

它可能不是efficientt返回mailid的一個對象的方法,但它能夠完成任務。您可以在這裏檢查代碼(abnMailMoneyFetcher()):GAS

相關問題