Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

460
Views
Converting emails to PDF if subject equals "xxxxx" and date equals today

I have written a script which has a trigger to run every hour, it searches my emails and extracts the data, turns it to a PDF and locates it in a folder if the subject equals "xxxx", it overwrites data in the folder if it already exists.. I would like to add in a new if function where it will only pick up emails for the current day and not history (to save efficiency of the script and data)

function saveGmailAsPDF2() {

  var gmailLabels  = 'xxxxx';
  var driveFolder  = DriveApp.getFolderById("folder url");
  var threads = GmailApp.search("subject:" + gmailLabels,0,20);

  if (threads.length > 0) {

  /* Google Drive folder where the Files would be saved */
  var folders = DriveApp.getFoldersByName(driveFolder);
  var folder = folders.hasNext() ?
  folders.next() : DriveApp.createFolder(driveFolder);

  /* Gmail Label that contains the queue */
  var label = GmailApp.getUserLabelByName(gmailLabels) ?
  GmailApp.getUserLabelByName(gmailLabels) : GmailApp.createLabel(driveFolder);

  for (var t=0; t<threads.length; t++) {

  threads[t].removeLabel(label);
  var msgs = threads[t].getMessages();

  var html = "";

  var subject = threads[t].getFirstMessageSubject();

  var previousdoc = driveFolder.getFilesByName(subject + ".pdf"); //gets name of csv, if exists in drive then move to trash before creating new file
  if (previousdoc.hasNext()) {
  previousdoc.next().setTrashed(true);}

  /* Append all the threads in a message in an HTML document */
  for (var m=0; m<msgs.length; m++) {

  var msg = msgs[m];

  html += "From: " + msg.getFrom() + "<br />";
  html += "To: " + msg.getTo() + "<br />";
  html += "Date: " + msg.getDate() + "<br />";
  html += "Subject: " + msg.getSubject() + "<br />";
  html += "<hr />";
  html += msg.getBody().replace(/<img[^>]*>/g,"");
  html += "<hr />";}

  /* Convert the Email Thread into a PDF File */

  var tempFile = DriveApp.createFile("temp.html", html, "text/html");
  folder.createFile(tempFile.getAs("application/pdf")).setName(subject + ".pdf");
  tempFile.setTrashed(true);}}}

  
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Explanation:

  • There is a function getLastMessageDate() that gives the date of a thread's most recent message. You can compare that against the date of today and if they match execute the rest of the code.

  • Since you use a for loop: for (var t=0; t<threads.length; t++) I think the condition if (threads.length > 0) is redundant because for loop won't run anyway if threads.length equals 0.

  • Because of the latter, I transferred the folder creation part of your code into the loop itself and execute it only when the last day of the thread is equal to today. But I leave this part for you to decide.

I can't test your code but this should work:

function saveGmailAsPDF2() {

  var gmailLabels  = 'xxxxx';
  var driveFolder  = DriveApp.getFolderById("folder url");
  var threads = GmailApp.search("subject:" + gmailLabels,0,20);

  // new code
  const today = new Date();
  const ss = SpreadsheetApp.getActive();
  const timezone = ss.getSpreadsheetTimeZone();
  const today_dt = Utilities.formatDate(today, timezone, 'yyyy-MM-dd');
  ///////////
 

  for (var t=0; t<threads.length; t++) {

  // new code
  var lastMessageDate = threads[t].getLastMessageDate();
  var thread_dt = Utilities.formatDate(lastMessageDate, timezone, 'yyyy-MM-dd');
  if(today_dt==thread_dt){
   ///////////
   
   /* Google Drive folder where the Files would be saved */
  var folders = DriveApp.getFoldersByName(driveFolder);
  var folder = folders.hasNext() ?
  folders.next() : DriveApp.createFolder(driveFolder);

  /* Gmail Label that contains the queue */
  var label = GmailApp.getUserLabelByName(gmailLabels) ?
  GmailApp.getUserLabelByName(gmailLabels) : GmailApp.createLabel(driveFolder);


  threads[t].removeLabel(label);
  var msgs = threads[t].getMessages();

  var html = "";

  var subject = threads[t].getFirstMessageSubject();

  var previousdoc = driveFolder.getFilesByName(subject + ".pdf"); //gets name of csv, if exists in drive then move to trash before creating new file
  if (previousdoc.hasNext()) {
  previousdoc.next().setTrashed(true);}

  /* Append all the threads in a message in an HTML document */
  for (var m=0; m<msgs.length; m++) {

  var msg = msgs[m];

  html += "From: " + msg.getFrom() + "<br />";
  html += "To: " + msg.getTo() + "<br />";
  html += "Date: " + msg.getDate() + "<br />";
  html += "Subject: " + msg.getSubject() + "<br />";
  html += "<hr />";
  html += msg.getBody().replace(/<img[^>]*>/g,"");
  html += "<hr />";}

  /* Convert the Email Thread into a PDF File */

  var tempFile = DriveApp.createFile("temp.html", html, "text/html");
  folder.createFile(tempFile.getAs("application/pdf")).setName(subject + ".pdf");
  tempFile.setTrashed(true);}}}
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!