Недавно мне нужно было извлечь все адреса электронной почты для сотен сообщений под этим ярлыком. Делать это вручную очень утомительно, но, к счастью, есть гораздо более быстрый способ использовать Apps Script.

В этом посте мы увидим, как настроить Google Sheet для извлечения всех адресов электронной почты для определенного ярлыка Gmail. Я поделюсь кодом и пройду по нему с вами.

Как использовать сервис Gmail с Apps Script и Google Sheets

Шаг 1. Настройте Google Таблицу

Таблица Google для этого примера очень проста для разнообразия.

Ячейка B1 - это место, где мы вводим метку, из которой хотим извлечь электронные письма, а затем в строке 3 находится заголовок одного столбца Электронная почта.

Лист выглядит так:

Шаг 2: Добавьте код

Go to Tools > Script editor...

Переименуйте проект и очистите код шаблона, чтобы окно редактора было пустым:

Затем вставьте следующий код:

// add menu to Sheet
function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Extract Emails')
      .addItem('Extract Emails...', 'extractEmails')
      .addToUi();
}
 
// extract emails from label in Gmail
function extractEmails() {
  
  // get the spreadsheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var label = sheet.getRange(1,2).getValue();
  
  // get all email threads that match label from Sheet
  var threads = GmailApp.search ("label:" + label);
  
  // get all the messages for the current batch of threads
  var messages = GmailApp.getMessagesForThreads (threads);
  
  var emailArray = [];
  
  // get array of email addresses
  var addedEmails = {};
messages.forEach(function(message) {
    message.forEach(function(d) {
      var emailsArray = d.getFrom().match(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)/gi);
      var email = emailsArray[0];
      if (addedEmails[email] === undefined && 
            email.indexOf("info") === -1  && 
            email.indexOf("invite") === -1  && 
            email.indexOf("noreplies") === -1  && 
            email.indexOf("order") === -1  && 
            email.indexOf("service") === -1  &&               
            email.indexOf("new") === -1  &&        
            email.indexOf("notif") === -1  &&        
            email.indexOf("admin") === -1  &&        
            email.indexOf("contact") === -1  &&        
            email.indexOf("events") === -1  &&        
            email.indexOf("mailer") === -1  &&        
            email.indexOf("updates") === -1  &&        
              email.indexOf("reply") === -1 &&
              email.indexOf("gov") === -1) {
          addedEmails[email] = 1;
          emailArray.push([email]);
        }
    });
  });
  
  sheet.getRange(4,1,emailArray.length,1).setValues(emailArray).sort(1); 
}

Этот скрипт использует Gmail Service для извлечения всех сообщений с выбранным ярлыком, а оттуда извлекает имена и адреса электронной почты.

Строки 2–7 добавляют настраиваемое меню в нашу электронную таблицу. В частности, строка 5 добавляет в меню элемент выбора Extract emails..., при нажатии которого запускается функция с именем extractEmails.

Шаг 3. Предоставьте приложению Apps Script разрешение на доступ к необходимым ресурсам.

Выберите в меню функцию onOpen и нажмите "Выполнить":

Наконец, вы снова увидите желтые всплывающие сообщения в верхней части браузера, говорящие о том, что сценарий готовится к запуску, а затем запускается.

Когда они исчезнут, вернитесь к своей таблице, и теперь вы должны увидеть новое настраиваемое меню под названием Extract Emails

Шаг 4. Извлеките адреса электронной почты

Теперь это просто случай запуска вашего скрипта из того пользовательского меню, которое мы создали выше.

Выберите Extract Emails... и щелкните его, чтобы запустить функцию извлечения электронной почты.

Предполагая, что все работает нормально, вы должны увидеть, как электронные письма заполняют ваш лист, как показано на анимированном изображении в верхней части этого экрана.