2014-01-17 61 views
1

更新:嗯,似乎發生了一些事情。現在我的收件箱裏已經有36,000多條消息,其中有353,000條消息。咦?這裏究竟發生了什麼。GmailApp.moveToArchive:執行成功,但沒有任何移動


我從未存檔過我的Gmail收件箱,因此其中有36,000多封郵件。我想將60天以上的所有郵件歸檔,而且我沒有辦法手動完成。

所以一些谷歌搜索後,我發現一個谷歌腳本,可以做到這一點,下面。然而,GmailApp.moveThreadsToArchive(threads);可明顯只能叫上最多同時100個線程,所以我試圖爭論它變成一個while循環調用了很多次,在100個線程時間:

/** 
* Archives Emails older than a given time interval 
* src: http://www.quora.com/Gmail/Is-there-a-way-to-auto-archive-emails-after-a-certain-number-of-days 
* 
* example: 
* RunAutoArchive('2w') 
* RunAutoArchive('1m') 
* RunAutoArchive('5y') 
*/ 

function RunAutoArchive(){ 

    // archive messages older than: 
    var interval='60d'; 

    // number of threads 
    var threadCount = 0; 
    var start = 0; 
    var end = 100; 

    // find messages older than a certain time 
    if(interval != ""){ 
    var searchQuery = 'in:Inbox older_than:'+interval; 
    var threads = GmailApp.search(searchQuery);  
    threadCount = threads.length; 

    // if there are any threads 
    if(threadCount > 0){ 
     while(start <= threadCount){ 

     // move threads to archive 
     GmailApp.moveThreadsToArchive(threads.slice(start,end)); 

     // increment count 
     start += 100; 
     end += 100; 

     } 
    } 
    } 

    // refresh threads 
    GmailApp.refreshThreads(threads); 

    return threadCount; 
} 

然而,調試併成功運行(非常長的執行腳本以[14-01-16 21:40:59:199 PST] Execution succeeded [284.472 seconds total runtime]結尾),但我的收件箱保持不變 - 保留了36,000多個未歸檔的消息。

有什麼建議可能是錯的?

+1

實際上限制了一次可以處理多少封電子郵件。這個問題可能會幫助你一點點(儘管它試圖解決一個完全不同的問題,這是一個以前的錯誤):http://stackoverflow.com/questions/15234882/need-help-optimizing-a-google -apps-script-that-labels-emails –

+0

儘管如此,您仍然需要適應一下您的需求。 –

+0

我也想指出,你的腳本沒有考慮到你有可能不完整的批次作爲最後一個。另外,你的腳本中有一些無用的混亂因素:你的區間變量永遠不會是一個空字符串,因爲你將它設置爲這樣,並且你不需要首先聲明線程數爲0,因爲如果你的搜索沒有帶來任何東西,會得到一個零長度的數組。當你刪除不必要的if語句時,後者是不需要的。 –

回答

0

要在x天后將收件箱gmail線程移入存檔,您可以使用以下命令並每分鐘設置一次觸發器以存檔大量傳入電子郵件,只需將scriptproperties鍵「CNT」設置爲0並運行以下腳本

function gmailAutoarchive1() { 

    var delayDays = 2; // will only impact emails more than 48h old 
    var maxDate = new Date(); 
    maxDate.setDate(maxDate.getDate()-delayDays); // what was the date at that time? 
    Logger.log("MAXDATE",maxDate); 

    // Get all the threads labelled 'autoarchive' 
    var label = GmailApp.getUserLabelByName("AUTOARCHIVE"); 

    var scriptProperties = PropertiesService.getScriptProperties(); 
    var cnt=scriptProperties.getProperty("CNT"); 
    var cnt_val=parseInt(cnt) 


// var threads = label.getThreads(cnt_val,499); 
    var threads = GmailApp.getInboxThreads(cnt_val,499); 

    // we archive all the threads if they're unread AND older than the limit we set in delayDays 
    for (var i = 0; i < threads.length; i++) { 

     Logger.log("del",threads[i].getLastMessageDate());  

    if (threads[i].getLastMessageDate()<maxDate) 
    { 
     threads[i].moveToArchive(); 
    // threads[i].moveToTrash(); 
    } 
    } 

    scriptProperties.setProperty("CNT", cnt_val+499) 

} 
相關問題