2014-01-17 2 views
1

Обновление: Умм, похоже, что-то случилось. Теперь мой почтовый ящик перешел от 36 000 до 353 000+ сообщений. А? Что здесь происходит.GmailApp.moveToArchive: Выполнение выполнено успешно, но ничего не произошло


Я никогда не архивировал свой почтовый ящик Gmail и, как результат, имел в нем 36 000+ сообщений. Я хотел бы архивировать все сообщения в течение 60 дней, и я не делаю это вручную.

Итак, после некоторых поисковых запросов я нашел скрипт google, который мог бы сделать это ниже. Однако GmailApp.moveThreadsToArchive(threads);, по-видимому можно назвать только до 100 потоков одновременно, поэтому я попытался пререкаться его в петлю, в то время, что вызывает его много раз на 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; 
} 

Тем не менее, как debugs, так и успешно выполняется (очень длинный Execution Transcript заканчивается на [14-01-16 21:40:59:199 PST] Execution succeeded [284.472 seconds total runtime]), но мой почтовый ящик остается неизменным - осталось 36 000 + unarchived сообщений.

Любые предложения, что может быть неправильным?

+1

Существуют фактические ограничения на то, сколько писем можно обрабатывать сразу. Этот вопрос может помочь вам немного (хотя он попытался решить совершенно другую проблему, которая была прежней ошибкой): http://stackoverflow.com/questions/15234882/need-help-optimizing-a-google -apps-script-that-labels-emails –

+0

Вам придется немного приспособить его к вашим потребностям. –

+0

Я также хотел бы отметить, что ваш сценарий не учитывает возможность того, что у вас есть (вероятно) неполная партия в качестве последней. Кроме того, у вас есть бесполезный беспорядок в вашем скрипте: ваша переменная-интервал никогда не будет пустой строкой, потому что вы установите ее как таковую, и вам не нужно сначала объявлять количество потоков в 0, потому что если ваш поиск ничего не приносит, вы Получится массив нулевой длины. Последнее не требуется, когда вы удаляете ненужный if-statement. –

ответ

0

Чтобы переместить потоки gmail в почтовый ящик в архив через x дней, вы могли бы использовать следующее и каждый раз устанавливать триггер для архивирования большого количества входящих писем, просто установите для параметра 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) 

} 
Смежные вопросы