如何获取所有电子邮件?

时间:2016-01-11 19:27:55

标签: google-apps-script google-apps gmail-api

我想从我的帐户Google Apps for Work收到所有电子邮件,并使用列ID(A列)和主题(B列)填写Google表格。

我是使用Google Apps脚本完成的,但是对于限制,我只能检索500个寄存器。我无法得到更多。

是否可以获取所有电子邮件并将其值放入Google表格?

enter image description here

更新

function getMail(){
var myspreadsheet = SpreadsheetApp.openById('xxxxxxx');
var mysheet = myspreadsheet.getSheets()[0];

var start = 0;
var max = 500;
var count =0;
var row = mysheet.getLastRow()+1
while(count < 7) 
{

var threads = GmailApp.getInboxThreads(start , max);
var messages = GmailApp.getMessagesForThreads(threads); 
var froms = [];
messages.get
  for(var i = 0; i < threads.length; i++)
{
   froms.push([messages[i][0].getId(),messages[i][0].getSubject()]);
}

  mysheet.getRange(mysheet.getLastRow()+1,1,threads.length,2).setValues(froms);

start =  start + 501;
count++;
}
}

问候,

1 个答案:

答案 0 :(得分:1)

这是一个解决您的用例的解决方案。

请注意,仍然存在一些不能超越的限制,您可以阅读更多相关信息here。例如,当所有线程的大小太大而系统无法处理时,getInboxThreads() 将失败。这很可能是您的解决方案中发生的情况。

相反,尝试使用getInboxThreads(start, max)这将检索一系列收件箱线程而不管标签。因此,假设您有500多封电子邮件,代码现在看起来应该是这样的。它不优雅,但它的工作原理。

function getMail(){
 var myspreadsheet = SpreadsheetApp.openById('xxxxxxxxxxxxxxxxxxxxxx');
 var mysheet = myspreadsheet.getSheets()[0];

 var start = 0;
 var max = 99;
 var count =0;
 var row = mysheet.getLastRow()+1
 while(count < 7) 
 {

   var threads = GmailApp.getInboxThreads(start , max);
   var messages = GmailApp.getMessagesForThreads(threads); 
   var froms = [];
    messages.get
      for(var i = 0; i < threads.length; i++)
    {
       froms.push([messages[i][0].getId(),messages[i][0].getSubject()]);
    }

    mysheet.getRange(mysheet.getLastRow()+1,1,threads.length,2).setValues(froms);

    start =  start + 100;
    count++;
    }
}

提醒:脚本运行时不能超过六分钟,如果是这样,脚本将抛出异常。

希望这会有所帮助,祝你好运!