1

当社は最近、Exchange 2007 から Google Apps for Business に移行しました。かなり複雑で大規模なフォルダー構造を持つ共有メールボックスがいくつかあり、(検索を最適化するために) これらのメールボックスにラベル付け手法を完全に実装するように依頼されました。

たとえば、移行後、以前は MyCompany/Projects/2012/Q3/Approved Projects/StackOverflow (フォルダー構造) にあった会話に、MyCompany/Projects/2012/Q3/Approved Projects/StackOverflow というラベルが付けられたとします。この会話には、MyCompany、Projects、2012、Q3、Approved Projects、StackOverflow というラベルを付ける必要があります。

これを正確に実行するスクリプトを作成しました (少なくともテスト環境では)。問題は、私が読んだことによると、Google API に対して実行できる呼び出しの数に関連する特定の制限があることです。また、スクリプトの実行時間は非常に貧弱です。

どういうわけかクライアント側で操作を実行し、それらを Google API に一括で送信する方法があるかどうか疑問に思っていました。キャッシュ サービスについて読んだことがありますが、正しい方向に進んでいるかどうか疑問に思っていました。

これは私のスクリプトです:

function addLabels() {
  //Get all labels
  var allLabels = GmailApp.getUserLabels();

  for (var i = 0; i < allLabels.length; i++) {
    var label = allLabels[i];//label to get the threads from
    var threads = label.getThreads();  //threads assigned with label
    var labels = label.getName().split("/");//array of new label names

    //add the new labels to the specified threads only if there's a "/" in the label's name
    if(label.getName().indexOf("/") != null){
      for (var a = 0; a < labels.length; a++){
        trace("Adding label '" + labels[a] + "' to "+ threads.length +" threads in '"+ label.getName() + "'.");

        //create a new label with the specified name and add it to the threads
        //var newLabel = GmailApp.createLabel(labels[a]);//comment this line for test purposes
        //newLabel.addToThreads(threads);//comment this line for test purposes
      }
    }
  }
}
function trace(message){
  Logger.log(message);
}

前もって感謝します!

4

1 に答える 1

0

このスクリプトを段階的に実行することをお勧めします。最初の段階は、作成する必要のあるすべての新しいラベルと、それらに割り当てる必要のあるスレッドを決定することです。第2段階は、これらのラベルを作成することです。最終段階では、これらのラベルをスレッドに割り当てます。大量の電子メールを処理している場合は、この作業を分割し、残りの作業のキューを保持し、トリガーを使用して処理を続行する必要がある場合があります。

于 2012-07-19T19:00:53.803 に答える