function exportEmailsToSheet() {
var labelNames = ['Coding', 'Excel']; // Add your labels here
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
setupHeaders(sheet);
var existingIds = getExistingMessageIds(sheet);
labelNames.forEach(function(labelName) {
var label = GmailApp.getUserLabelByName(labelName);
if (!label) {
Logger.log('Label not found: ' + labelName);
return;
}
var threads = label.getThreads();
threads.forEach(function(thread) {
var messages = thread.getMessages();
messages.forEach(function(message) {
var messageId = message.getId();
if (existingIds.indexOf(messageId) !== -1) {
return;
}
var attachments = message.getAttachments();
var attachmentNames = attachments.map(function(file) {
return file.getName();
}).join(', ');
sheet.appendRow([
messageId,
labelName,
message.getDate(),
message.getFrom(),
message.getTo(),
message.getCc(),
message.getSubject(),
message.getPlainBody(),
attachmentNames
]);
existingIds.push(messageId);
});
});
});
Logger.log('Emails exported successfully without duplicates.');
}
function setupHeaders(sheet) {
if (sheet.getLastRow() === 0) {
sheet.appendRow([
'Message_ID',
'Label',
'Date',
'Sender',
'Recipients',
'CC',
'Subject',
'Full Body',
'Attachments'
]);
}
}
function getExistingMessageIds(sheet) {
var lastRow = sheet.getLastRow();
if (lastRow < 2) {
return [];
}
return sheet
.getRange(2, 1, lastRow - 1, 1)
.getValues()
.flat()
.filter(String);
}