I am trying to build a table including the following data for all emails sent/received within a specific time frame from my gmail account: (1) Message Id, (2) Sender email address, (3) Recipient email address, (4) Day and time, (5) Subject
The following script seems to work however it exceeds maximum execution time allowed by Google Apps Script. Would you be able to help me amend it so that it can run into batches?
function dateToString(date) {
return date.getFullYear() + "/" + (date.getMonth() + 1) + "/" + date.getDate();
}
function searchByTimeFrame(from, to) {
var threads = GmailApp.search("after:"+dateToString(from) +" before:"+dateToString(to)+" in:anywhere");
var results = [];
for (var i = 0; i < threads.length; i++) {
Logger.log(threads[i].getFirstMessageSubject() + " (count: " + threads[i].getMessageCount() + ")");
var messages = threads[i].getMessages();
for (var j = 0; j < messages.length; j++) {
var message = messages[j];
var sender = message.getFrom();
var recipientsStr = message.getTo()
results.push([message.getId(), sender, recipientsStr, message.getDate(), message.getSubject()]);
continue;
}
}
return results;
}
function main() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var from = ss.getRange("B4").getValue();
var to = ss.getRange("B5").getValue();
var results = searchByTimeFrame(from, to);
if(results.length > 0) {
var sheet = ss.insertSheet();
var header = sheet.getRange("A1:E1").setValues([['Id', 'From', 'To', 'Date', 'Subject']]).setFontWeight("bold");;
var cell = sheet.getRange("A2:E"+(results.length+1));
cell.setValues(results);
} else {
var ui = SpreadsheetApp.getUi(); // Same variations.
ui.alert('No email found...');
}
}