-1

当应用某些标签时,我正在使用以下两个脚本来回复或转发电子邮件。我有两张表(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);      
      }
    }
  }
}
4

1 回答 1

0

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

如果你把所有这些因素都考虑在内,你的数字可能会超过 10,000。

于 2013-05-24T07:24:14.253 回答