Skip to content

Instantly share code, notes, and snippets.

@sauntimo
Created November 14, 2012 15:33
Show Gist options
  • Save sauntimo/4072792 to your computer and use it in GitHub Desktop.
Save sauntimo/4072792 to your computer and use it in GitHub Desktop.
Log Email in GAS
function logIncomingEmails() {
var EmailLog = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Email Log")
var rows = EmailLog.getDataRange();
var numEmailRows = rows.getNumRows();
var Unlogged = GmailApp.getUserLabelByName("Unlogged")
var Logged = GmailApp.getUserLabelByName("Logged")
var UnloggedThreads = Unlogged.getThreads(0,50); // Returns an array of the first 50 unlogged threads. Hopefully there won't be more than 50 per minute!
var IssueLog = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Issue Log");
var IssueRows = IssueLog.getDataRange();
var NumIssueRows = IssueRows.getNumRows();
for( var i = 0; i < UnloggedThreads.length; ++i ) {
var ThreadMessages = UnloggedThreads[i].getMessages();
var from = ThreadMessages[ThreadMessages.length - 1].getFrom();
var subject = UnloggedThreads[i].getFirstMessageSubject();
var body = ThreadMessages[ThreadMessages.length - 1].getBody(); //.replace(/<([A-Z][A-Z0-9]*)\b[^>]*>(.*?)<\/\1>/g,"");
var NewBody = RemoveHTML(body);
var updated = UnloggedThreads[i].getLastMessageDate()
var ref = (subject.indexOf("Ref:") != -1) ? subject.slice(subject.indexOf("Ref:")+4,subject.indexOf("Ref:")+11) : "";
EmailLog.getRange("A" + (numEmailRows + 1)).setValue(from);
EmailLog.getRange("B" + (numEmailRows + 1)).setValue(subject);
EmailLog.getRange("C" + (numEmailRows + 1)).setValue(updated);
EmailLog.getRange("D" + (numEmailRows + 1)).setValue(ref);
UnloggedThreads[i].removeLabel(Unlogged);
UnloggedThreads[i].addLabel(Logged);
if(ref.length != 0){
var IssueProperties = DefineIssueProperties(ref,IssueLog,NumIssueRows);
if(IssueProperties["Type"] == "Old"){
//EmailLog.getRange("E" + (numEmailRows + 1)).setValue(IssueProperties["OldIssueSheetID"]);
UpdateIssueHistorySheet(updated,NewBody,ref,IssueProperties["OldIssueSheetID"],IssueLog,NumIssueRows,false);
}
numEmailRows++;
}
}
}
function RemoveHTML(body){
var NewBody = body; // Set new string equal to old string
for(var j = 0; j < body.length; j++){
if(body.charAt(j) == "<"){
var OPos = j; // find tag opening in old string
} else if(body.charAt(j) == ">"){
var CPos = j; // find tag closing in old string
var HTML = body.slice(OPos,CPos+1); // HTMl tag to be removed - note, created from old string
var NewBody = NewBody.replace(HTML,""); // Remove HTML tag from new string
}
}
return NewBody; // Return new HTML-free string
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment