GmailApp和转发/回复调用太多次 - 不清楚原因(加上movetoarchive不工作)

时间:2013-05-23 20:25:49

标签: google-apps-script gmail google-sheets google-apps-for-education

我在使用以下两个脚本时,在应用某些标签时回复或转发电子邮件。我有两张纸(replySheet和forwardSheet),它们在第一列中保存标签名称。然后,replySheet在下一个单元格中显示电子邮件回复文本,而forwardSheet具有要将邮件转发到的电子邮件地址。

两个问题:

  • 我收到了GmailApp.getUserLabelByName的错误消息“服务调用了一天太多次”。我了解Google Apps for Education的限制是每天10,000次,但此代码应该每五分钟运行一次,或者每个标签每天运行288次。我有什么误会?有没有想过重写代码以避免这种情况?
  • .moveToArchive()似乎在replyLabel()中没有做任何事情。我已经尝试将它移动到代码中的不同点(发送回复之前和之后),但它没有归档线程。

感谢您对这两个问题的任何建议。如果我能让我的问题更清楚,请告诉我。

var thisSS = SpreadsheetApp.getActiveSpreadsheet();
var forwardSheet = thisSS.getSheetByName('Forwards');
var emailSheet = thisSS.getSheetByName('Email');
var alias = emailSheet.getRange(3, 2).getValue();
var replyTo = emailSheet.getRange(2, 2).getValue();
var fromName = emailSheet.getRange(1, 2).getValue();
var replySheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Replies');

function forwardLabel() {
  var data = forwardSheet.getRange(2, 1, forwardSheet.getLastRow(), 2).getValues();
  for (i in data) {   
    var row = data[i];   
    var name = row[0].toString();
    var email = row[1].toString();
    if (name && (email != "")) {
      var label = GmailApp.getUserLabelByName(name);    
      var threads = label.getThreads(0, 100);
      for (i in threads) {
        var messages = threads[i].getMessages();
        for (j in messages) {
          Logger.log(messages[j].getSubject());
          messages[j].forward(email, {bcc:alias, from:alias, name:fromName}).markRead();
          label.removeFromThread(threads[i]);
        }
        Utilities.sleep(1000);
      }
    }
  }
}

function replyLabel() {
  var data = replySheet.getRange(2, 1, replySheet.getLastRow(), 2).getValues();
  var signature = emailSheet.getRange(4, 2).getValue().toString();
  var alias = emailSheet.getRange(3, 2).getValue();
  for (i in data) { 
    var labelName = data[i][0].toString();
    var label = GmailApp.getUserLabelByName(labelName);
    var replyText = data[i][1].toString();
    replyText = replyText + signature;
    if (label && (replyText !== "")) {
      var labeledEmails = label.getThreads(0, 100);
      for (j in labeledEmails) {
        labeledEmails[j].moveToArchive();
        label.removeFromThread(labeledEmails[j]);
        var messages = labeledEmails[j].getMessages();
        var message = messages[0];
        message.reply(replyText,{htmlBody:replyText, bcc:alias, from:alias, name:fromName});
        Utilities.sleep(2000);      
      }
    }
  }
}

1 个答案:

答案 0 :(得分:0)

你有多少个标签?你有嵌套循环,288乘以每个循环,你很快就可以达到10,000。 另请注意,您没有计算其他GMail Read操作,如getTHreads()和getMessages()。

如果考虑到所有这些因素,您的数字可能超过10,000。