web-dev-qa-db-ja.com

Gmailアドレスをスプレッドシートに取り込むためのGoogleスクリプト

このGoogleスクリプトは、Gmailで「LabelToGet」というラベルのメールを検索し、これらのメールで作成されたスプレッドシートへのリンクを送信します。

function createAndSendDocument() {
  // Create a new document with the title 'Email Contacts'
  var doc = SpreadsheetApp.create('My Contacts');

  var sh = doc.insertSheet('Emails', 0);

   // get all messages
   var eMails = GmailApp.getMessagesForThreads(
     GmailApp.search("label:LabelToGet"))
     .reduce(function(a, b) {return a.concat(b);})
     .map(function(eMails) {
        return eMails.getFrom() 
      });

   // sort and filter for unique entries  
   var aEmails = eMails.sort().filter(function(el,j,a){if(j==a.indexOf(el))return 1;return 0});  

   // create 2D-array
   var aUnique = new Array();  
   for(var k in aEmails) {
     aUnique.Push([aEmails[k]]);
   }

   // add data to sheet
   sh.getRange(1, 1, aUnique.length, 1).setValues(aUnique);

  // Get the URL of the document
  var url = doc.getUrl();

  // Get the email address of the active user - that's you
  var emailAddress = Session.getActiveUser().getEmail();

  // Send yourself an email with a link to the document
  GmailApp.sendEmail(emailAddress,
                     'Heres the link to it',
                     'click here: ' + url);
}

うまくいきますが、このラベルには何千通ものメールがあり、スクリプトは最新の500件までしか実行されていないようです。

このラベルのすべての電子メールを閲覧しない原因となるもの、またはそれを実現するために私ができることを誰かが知っていますか?

3
ObjectiveFlash

Gmail.searchは最初の数百件のメールのみを返します。後のメッセージを取得する場合は、offsetパラメーターを指定する必要があります。

以前に Gmailフォルダーからメールアドレスを抽出する 用のGoogleスクリプトを作成しましたが、以前のメッセージでも同様に機能します。

3
Amit Agarwal