Search code examples
gmailgoogle-apps-scriptgmail-imap

Searching emails in gmail based on time


I want a list of all yesterday's emails from gmail. I am trying to process it using google apps script, by writing a query on my inbox, and then using GmailApp.search. The after: and before: search query in gmail returns results that are not expected, since the query searches on the basis of the SMTP server time that the mail is sent from (which is google's server). Hence, being in a different time zone, the search yields inappropriate results to me. Is there a way to search gmail using a time criteria, so that I can accommodate for the time zone difference?

Please note that the local time zone, calendar, gmail etc. is correctly configured for my timezone, so the emails that I see in my inbox are correctly timed. Only the search is creating an issue.


Solution

  • Figured out a way after some trial and error, that it is indeed possible to search gmail emails by time. Notice that the Date() returned in google apps script is according to your timezone.

    The code below will return all previous day's emails in inbox, assuming new Date() is giving the date and time according to your timezone. Division by 1000 is done because getTime() returns milliseconds, while the newer / older search query expects seconds.

    var month = new Date().getMonth();
    var date = new Date().getDate();
    var year = new Date().getFullYear();
    var time1 = new Date(year, month, date, 0, 0, 0).getTime();
    var time2 = time1 - 86400000;
    var query = "newer:" + time2/1000 + " older:"  + time1/1000 + " in:inbox";
    var conversations = GmailApp.search(query);