Google Apps Script → HTML Export
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);
}