Google apps script and GmailApp: receive only new messages

I am trying to implement a simple google script that processes every message received by a gmail user.
I found an example that does something like this:

var threads = GmailApp.getInboxThreads();
for (var i=0; i < threads.length; i++) {
   var messages = threads[i].getMessages();

   for (var j=0; j < messages.length; j++) {
       if (!messages[j].isUnread()) {
         continue; 
       }
      //process message
   }
}

That is: I repeat all the messages in the inbox and search for unread ones. It is very slow for 1800 messages.
Ideally, I am looking for a trigger that starts after each new message.
If this does not happen, I will try to use this so that I see:

GmailApp.getMessageById(id)
+5
source share
5 answers

, , GmailApp.search()... , .

// find unread messages
var threads = GmailApp.search('is:unread');
....

, . , "paged" .

GmailApp.search(query) GmailApp.search(query, start, max)

+8

, , . :

, "ToBeProcessedByScript" . Gmail, to:.

script, GmailApp.getUserLabelByName("ToBeProcessedByScript").getThreads(). .

+6

GmailApp.getInboxThreads(0, 50);

.

+3

, , . , :

function getUnreadMails() {
   var ureadMsgsCount = GmailApp.getInboxUnreadCount();
   var threads;
   var messages;
   var k=1;
   if(ureadMsgsCount>0)
   {        
     threads = GmailApp.getInboxThreads(0, ureadMsgsCount);
     for(var i=0; i<threads.length; i++)
     {
       if(threads[i].isInInbox())
       {
          messages = threads[i].getMessages();
          for(var j=0; j<messages.length; j++)
          {

             while (messages[j].isUnread() === false)
             {
             threads=GmailApp.getInboxThreads(k, ureadMsgsCount);
             messages = threads[i].getMessages();
             k++;
             }
             Logger.log(messages[j].getSubject());

             // process unread message
          }
       }
     }
   }
 }
+2

You can create a time trigger as mentioned by djtek, but instead of marking all the messages and then receiving the marked messages, you can simply get the number of unread messages and get streams from 0 to the number of unread messages, following the code that works for me:

 function getUnreadMails() {
   var ureadMsgsCount = GmailApp.getInboxUnreadCount()
   if(ureadMsgsCount>0)
   {        
     var threads = GmailApp.getInboxThreads(0, ureadMsgsCount);
     for(var i=0; i<threads.length; i++)
     {
       if(threads[i].isInInbox())
       {
          var messages = threads[i].getMessages();
          for(var j=0; j<messages.length; j++)
          {
             Logger.log(messages[j].getSubject());
             // process unread message
          }
       }
     }
   }
 }
+1
source

All Articles