-1

次の 2 つのスクリプトを使用して、特定のラベルが適用されたときに電子メールに返信または転送しています。最初の列にラベル名を保持する 2 つのシート (replySheet と forwardSheet) があります。次に、replySheet は次のセルに電子メールの返信テキストを持ち、forwardSheet はメッセージの転送先の電子メール アドレスを持ちます。

2 つの質問:

  • GmailApp.getUserLabelByName で「1 日にサービスが呼び出されすぎました」というエラー メッセージが表示されました。Google Apps for Education の制限が 1 日あたり 10,000 であることは承知していますが、このコードは 5 分ごとに実行するか、ラベルごとに毎日 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 に達する可能性があります。また、getTHreads() や getMessages() などの他の GMail 読み取り操作はカウントされないことに注意してください。

これらすべてを考慮すると、10,000 を超える数になる可能性があります。

于 2013-05-24T07:24:14.253 に答える