Search code examples
google-apps-scriptgmail

Count Number of Emails in Inbox by Sender


Referencing another user's question, I've been attempting to obtain the number of emails for each email address, from within my Gmail Inbox. I was sure to enable to Gmail API in Google Developer Console, as well as in the Google Apps Script. However, upon running the script, I receive an error which states

"Exception: Invalid argument: value (line 22, file "Code")".

I've been searching Google for some answers, but my lack of understanding has hindered my progress.

Below is the full code, excluding my email address. Any suggestions are greatly appreciated.

function sender_list_paged(token) {
  var token=token||null;
  var query="in:inbox"; 
  var sender_array=[];
  var uA=[]
  var cObj={};
  do{
    var result=Gmail.Users.Messages.list("[email protected]", {maxResults:10,pageToken:token,q:query});
    var list=result;
    Logger.log(list);
    for(var i=0;i<list.messages.length;i++) {
      var sender=GmailApp.getMessageById(list.messages[i].id).getFrom();
      if(uA.indexOf(sender)==-1) {
        uA.push(sender);
        sender_array.push([sender]);
        cObj[sender]=1;
      }else{
        cObj[sender]+=1;
      }
    }
    token=list.nextPageToken;
    PropertiesService.getUserProperties().setProperty("lastpagetoken", token);
  }
  while(token);
  sender_array.forEach(function(r){
    r.splice(1,0,cObj[r[0]]);
  });
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet()
  sh.clear();
  sh.appendRow(['Email Address','Count']);
  sh.getRange(2, 1,sender_array.length,2).setValues(sender_array).sort({column:1,ascending:true});
}

Solution

  • I see the post you are referring to has a workable solution that runs:

    function sender_list() {
      var inbox_threads=GmailApp.search('in:anywhere');
      var sender_array=[];
      var uA=[];
      var cObj={};
      for(var i=0;i<inbox_threads.length;i++) {
        var message=inbox_threads[i].getMessages();
        for(var x=0;x<message.length; x++) {
          var sender=message[x].getFrom();  
          if(uA.indexOf(sender)==-1) {
            uA.push(sender);
            sender_array.push([sender]);
            cObj[sender]=1;
          }else{
            cObj[sender]+=1;
          }
        }
      }
      sender_array.forEach(function(r){
        r.splice(1,0,cObj[r[0]]);
      });
      var ss=SpreadsheetApp.getActive();
      var sh=ss.getActiveSheet()
      sh.clear();
      sh.appendRow(['Email Address','Count']);
      sh.getRange(2, 1,sender_array.length,2).setValues(sender_array).sort({column:1,ascending:true});
    
    }
    

    Desclaimer:

    The code used in this post comes from here:

    Count number of Gmail emails per sender