Skip to content

Instantly share code, notes, and snippets.

@psifertex
Last active January 21, 2022 17:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save psifertex/aa423d024e85423a4f62eba8b9cedadf to your computer and use it in GitHub Desktop.
Save psifertex/aa423d024e85423a4f62eba8b9cedadf to your computer and use it in GitHub Desktop.
google apps script to save/sort incoming resumes
function processResumes()
{
/* Configuration */
var labelToSave = 'Resumes';
var labelToMarkSaved = 'Resumes/Saved';
var labelBroken = 'Resumes/Saved/Broken';
var resumeFolderID = 'INSERTYOURFOLDERIDHERE';
// Folder ID can be found just by browsing to the folder in google drive
/* Configuration Goes Here */
/* Shouldn't need to tweak below here */
var date = new Date();
var folderName = Utilities.formatDate(date, Session.getScriptTimeZone(), "yyyy-MM");
var resumes = DriveApp.getFolderById(resumeFolderID);
var resumeFolder = resumes.getFoldersByName(folderName);
if (resumeFolder.hasNext())
{
resumeFolder = resumeFolder.next();
} else {
resumeFolder = resumes.createFolder(folderName);
}
var label = GmailApp.createLabel(labelToSave);
var saved = GmailApp.createLabel(labelToMarkSaved);
var broken = GmailApp.createLabel(labelBroken);
if (label)
{
var threads = label.getThreads();
for (var i in threads)
{
var isSaved = false;
var thread = threads[i];
var labels = thread.getLabels();
for (var j in labels) {
if (labels[j].getName() == saved.getName() || labels[j].getName() == broken.getName())
{
isSaved = true;
}
}
if (!isSaved)
{
var msgs = thread.getMessages();
for (var k in msgs)
{
var extracted = false;
var mesg = msgs[k];
var attachments = mesg.getAttachments();
var fromStr = mesg.getFrom();
var messageDate = Utilities.formatDate(mesg.getDate(), Session.getScriptTimeZone(), "yyyy-MM-dd");
var messageSubject = mesg.getSubject();
for(var l in attachments)
{
//save attachments to resumes folder
var attachmentName = attachments[l].getName() || "";
if (attachments[l].getContentType() == "application/pdf" || attachments[l].getContentType() == "text/html" || attachmentName.slice(-4) == ".pdf" || attachmentName.slice(-5) == ".html" || attachmentName.slice(-4) == ".doc" || attachmentName.slice(-5) == ".docx")
{
Logger.log("["+date+"]: Attachment saved from email with subject: "+mesg.getSubject()+" into folder: "+resumeFolder.getUrl()+"\n");
resumeFile = resumeFolder.createFile(attachments[l].copyBlob());
oldExt = attachmentName.split('.').pop();
resumeFile.setName(messageDate + " " + fromStr + " " + messageSubject + oldExt);
extracted=true;
}
}
if (!extracted)
{
//Need to print the PDF of the email body
Logger.log("["+date+"]: HTML->PDF saved from email with subject: "+mesg.getSubject()+" into folder: "+resumeFolder.getUrl()+"\n");
var htmlBodyFile = resumeFolder.createFile('body.html', mesg.getBody(), "text/html");
var pdfBlob = htmlBodyFile.getAs('application/pdf');
pdfBlob.setName(messageDate + " " + fromStr + " " + messageSubject + ".pdf");
resumeFolder.createFile(pdfBlob);
htmlBodyFile.setTrashed(true);
} else {
Logger.log("["+date+"]: Message failed to save with subject: "+mesg.getSubject()+" into folder: "+resumeFolder.getUrl()+"\n");
thread.addLabel(broken);
continue
}
}
thread.addLabel(saved);
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment