【问题标题】:GmailApp.moveToArchive: Execution succeeded, but nothing movedGmailApp.moveToArchive:执行成功,但没有移动
【发布时间】:2014-01-17 05:47:03
【问题描述】:

更新:嗯,似乎发生了一些事情。现在,我的收件箱中的邮件已从 36,000 多条增加到 353,000 多条。嗯?这到底是怎么回事。


我从未归档过我的 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 多条未归档的消息。

有什么建议可能是错的吗?

【问题讨论】:

  • 一次可以处理多少封电子邮件实际上是有限制的。这个问题可能对您有所帮助(即使它试图解决一个完全不同的问题,即以前的错误):stackoverflow.com/questions/15234882/…
  • 不过,您必须根据自己的需要对其进行一些调整。
  • 我还想指出,您的脚本没有考虑到最后一个批次(可能)不完整的可能性。此外,您的脚本中有一些无用的混乱:您的间隔变量永远不会是空字符串,因为您将其设置为空字符串,并且您不需要最初将线程数声明为 0,因为如果您的搜索没有带来任何结果,您'将得到一个长度为零的数组。当您删除不必要的 if 语句时,不需要后者。

标签: javascript google-apps-script gmail


【解决方案1】:

要在 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)

}

【讨论】:

    猜你喜欢
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 2015-06-15
    • 1970-01-01
    相关资源
    最近更新 更多