6 проектів Google Apps Script, які покращать вашу роботу з Gmail

Знову я тут, щоб поговорити про продуктивність і автоматизацію в Gmail. Цього разу ми перейдемо в повноцінний режим для комп’ютерів і будемо використовувати Google Apps Script, щоб покращити роботу з Gmail.

Gmail має багато вбудованих налаштувань, які можна налаштувати для автоматизації завдань і підвищення продуктивності. Однак це має свої обмеження, і багато функцій не пропонують достатньо можливостей налаштування. Тут ви можете взяти справу у свої руки за допомогою Google Apps Script.

За допомогою нього ви можете створювати користувацькі сценарії, які можуть виконувати завдання, які не може виконувати Gmail. Крім того, ви можете встановити тригери на основі часу для автоматизації цих сценаріїв.

Щоб почати, я наведу кілька корисних сценаріїв, які, безумовно, покращать роботу з Gmail. Я переконався, що кожен сценарій автоматично вирішує типові проблеми, такі як дублікати або автоматичне створення нової папки. Тому деякі сценарії можуть здаватися трохи довшими, ніж вони призначені.

Створіть сценарій у Google Apps Script

Перш ніж почати застосовувати та налаштовувати ці сценарії, вам потрібно знати, як створити сценарій у Google Apps Script і запустити його. Ось як:

Відкрийте Google Apps Script і натисніть кнопку «Новий проект» на лівій панелі.

Тут вам потрібно видалити весь уже написаний код і скопіювати/вставити сценарій, який я надам. Після цього натисніть кнопку «Зберегти», щоб зберегти сценарій.

Щоб виконати сценарій, натисніть кнопку «Виконати» поруч із «Зберегти». Вас попросять надати дозволи та з’явиться попередження про те, що сценарій не перевірено. Ви можете проігнорувати попередження та надати дозволи, оскільки сценарій призначено для особистого використання, і Google його не перевіряв.

Ось і все, скрипт запуститься, і в журналі виконання буде відображено, успішно він виконано чи ні.

Налаштуйте тригер

Багато з цих сценаріїв працюють найкраще, коли вони запускаються автоматично. На щастя, Google Apps Script також має розділ для створення тригерів на основі часу для кожного сценарію, щоб вони запускалися автоматично.

Однак перш ніж розповісти вам про створення тригера, ви повинні це знати Google Apps Script має обмежені квоти залежно від того, чи підписані ви на План Google Workspace чи ні. Якщо у вас занадто багато сценаріїв, що виконуються одночасно та надто часто, ви можете досягти щоденної квоти, що призведе до зупинки служби на час.

Навіть якщо у вас є можливість виконувати сценарії щохвилини, це буде значною витратою вашої щоденної квоти. Переконайтеся, що ви встановлюєте лише таймер, який надійно виконує роботу.

Щоб створити тригер, клацніть Тригери на панелі ліворуч, коли сценарій відкрито, а потім натисніть кнопку Додати тригер.

Тут ви можете вибрати таймер від хвилин до місяців і інтервал. Ви також можете вибрати фіксовану дату й час, щоб запустити сценарій лише один раз у певний час. Вибравши всі, натисніть «Зберегти», щоб створити тригер.

Якщо ви не надали дозвіл на запуск сценарію, як я казав вам раніше, тоді вас попросять надати дозвіл перед створенням тригера.

Залежно від вашого вибору тригер працюватиме безперервно. Якщо він зіткнеться з будь-якою проблемою, він сповістить вас разом із помилкою, яка сталася.

Тепер давайте зануримося в деякі практичні приклади того, як ви можете використовувати Google Apps Script для автоматизації своїх завдань Gmail.

Надсилайте повторювані листи

function sendRecurringEmail() {
  var recipient = "[email protected]";
  var subject = "Your subject here";
  var message = "Your custom message here";

  GmailApp.sendEmail(recipient, subject, message);
}

Gmail дозволяє планувати електронні листи, але не повторювані електронні листи. Незалежно від того, чи хочете ви комусь щось нагадати, чи хочете переконатися, що вашу електронну пошту ніхто не пропустить. Цей простий скрипт надсилає електронний лист на вказану адресу з темою та повідомленням, яке ви надаєте. Потім ви можете налаштувати повторюваний тригер за допомогою параметра Тригери.

У сценарії відредагуйте одержувача, тему та розділ повідомлення з фактичними деталями. Переконайтеся, що лапки навколо прикладу тексту залишаються. Наприклад, тема повинна виглядати так:

var subject = "Important Reminder";

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

Фільтрувати електронні листи з посиланнями на мітку

function processUnreadEmailsWithLinks() {
  var labelName="Emails with Links";
  var label = GmailApp.getUserLabelByName(labelName);
  if (!label) {
    label = GmailApp.createLabel(labelName);
  }
  var threads = GmailApp.search('is:unread');
  for (var i = 0; i < threads.length; i++) {
    var messages = threads[i].getMessages();
    for (var j = 0; j < messages.length; j++) {
      var message = messages[j];
      var body = message.getBody();
      if (bodyContainsLinks(body)) {
        label.addToThread(threads[i]);
      }
    }
  }
}

function bodyContainsLinks(body) {
  var regex = /https?:\/\/[^\s<>"']+/g;
  return regex.test(body);
}

Електронні листи з посиланнями в тілі зазвичай важливіші. Незалежно від того, чи отримуєте ви звіти від колеги чи підписалися на інформаційні бюлетені, які надсилають певні ресурси, класифікація електронних листів із посиланнями може бути дуже корисною.

Цей сценарій переглядає всі непрочитані електронні листи у вашому обліковому записі Gmail і відокремлює листи з посиланнями в тілі електронної пошти до нової мітки під назвою «Електронні листи з посиланнями». За замовчуванням він шукатиме електронні листи скрізь у Gmail, але ви можете звузити пошук, відредагувавши змінні threads = GmailApp.search(‘is:unread’); лінія. Нижче наведено кілька способів його редагування.

Шукайте лише в Inbox: var threads = GmailApp.search(‘in:inbox is:unread’);

Шукайте в інших мітках: var threads = GmailApp.search(‘in:inbox is:unread OR in:promotions is:unread OR in:important is:unread’);

Шукайте всі прочитані/непрочитані електронні листи в Inbox: var threads = GmailApp.search(‘in:inbox’);

Пошук електронних листів від певного відправника: var threads = GmailApp.search(‘from:[email protected]‘);

Ці приклади повинні дати вам уявлення про те, як ви можете редагувати сценарій, щоб звузити список електронних листів із посиланнями. Крім того, я вважаю, що налаштування щоденного тригера буде більш ніж достатньо для таких типів електронних листів.

Автоматичне видалення старих електронних листів

function deleteOldEmails() {
  var threads = GmailApp.search('older_than:30d');
  for (var i = 0; i < threads.length; i++) {
    threads[i].moveToTrash();
  }
}

Якщо ви не хочете зберігати старі електронні листи, ви можете скористатися цим скриптом для видалення електронних листів, які старші певного періоду. Сценарій тут шукатиме всі електронні листи в Gmail, які старші 30 днів, і відправлятиме їх у кошик. Ви можете змінити частину ‘older_than:30d’, щоб указати, скільки старих електронних листів ви хочете видалити, наприклад ‘older_than:180d’.

Якщо натомість ви хочете видалити електронні листи з певної мітки, ви можете відредагувати частину Gmail.App.search, щоб включити мітку. Подобається це:

var threads = GmailApp.search(‘in:inbox older_than:30d’);

Щоб зробити процес автоматичним, створіть тригер, який автоматично запускатиме сценарій кожні кілька днів. Залежно від того, скільки старих електронних листів ви хочете видалити, я впевнений, щотижневий або навіть щомісячний тригер буде доречним.

Зберегти всі електронні адреси в Google Таблицях

function getEmailAddresses() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetName = "Email Addresses";
  var sheet = ss.getSheetByName(sheetName);
  
  if (!sheet) {
    sheet = ss.insertSheet(sheetName);
    sheet.appendRow(["Email Address"]);
  }
  
  var threads = GmailApp.getInboxThreads();
  var emailAddresses = [];
  
  var existingData = sheet.getDataRange().getValues();
  if (existingData.length > 1) {
    var existingEmailAddresses = existingData.slice(1).flat();
  } else {
    var existingEmailAddresses = [];
  }
  
  for (var i = 0; i < threads.length; i++) {
    var messages = threads[i].getMessages();
    for (var j = 0; j < messages.length; j++) {
      var emailAddress = messages[j].getFrom();
      if (emailAddresses.indexOf(emailAddress) === -1 && existingEmailAddresses.indexOf(emailAddress) === -1) {
        emailAddresses.push(emailAddress);
      }
    }
  }
  
  for (var k = 0; k < emailAddresses.length; k++) {
    sheet.appendRow([emailAddresses[k]]);
  }
}

Цей сценарій шукатиме в Gmail усі електронні листи, копіюватиме імена й адреси електронної пошти відправників/одержувачів і зберігатиме їх у Google Таблицях. Для цього можна використовувати багато способів, як-от створення списку розсилки для електронного маркетингу або створення запису про всіх, хто з вами зв’язується.

Однак створення цього сценарію дещо відрізняється від інших, оскільки вам потрібно відкрити сценарій Google Apps у Google Таблицях, щоб він міг ідентифікувати аркуш. Однак це потрібно робити лише вперше. Ось як:

Відкрийте новий аркуш у Таблиці Google. Тут натисніть «Розширення» у меню вище, а потім виберіть «Сценарій програм». Це відкриє сценарій Google Apps, і ви зможете додати сценарій і запустити його, як я продемонстрував раніше.

Сценарій створить новий аркуш із назвою «Адреси електронної пошти» з іменем та адресою електронної пошти, написаними в одній клітинці. Вам не потрібно буде знову відкривати аркуш у майбутньому для кожного тригера. Будь-яка нова адреса електронної пошти буде оновлена ​​на аркуші в кінці без дублікатів.

Залежно від того, як часто ви отримуєте електронні листи від нових відправників, щоденний або щотижневий тригер має бути хорошим.

Автоматично зберігайте вкладення електронної пошти на Google Drive

function onNewEmail(e) {
  var threads = GmailApp.getInboxThreads(0, 1);
  var messages = threads[0].getMessages();
  
  var folderName = "Email Attachments";
  var folderIterator = DriveApp.getFoldersByName(folderName);
  var folder;

  if (folderIterator.hasNext()) {
    folder = folderIterator.next();
  } else {
    folder = DriveApp.createFolder(folderName);
  }
  
  for (var i = 0; i < messages.length; i++) {
    var message = messages[i];
    
    if (message.getAttachments().length > 0) {
      var attachments = message.getAttachments();
      
      for (var j = 0; j < attachments.length; j++) {
        var attachment = attachments[j];
        var attachmentHash = Utilities.base64Encode(Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, attachment.getBytes()));
        var existingFiles = folder.getFiles();

        var isDuplicate = false;

        while (existingFiles.hasNext()) {
          var existingFile = existingFiles.next();
          var existingFileHash = Utilities.base64Encode(Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, existingFile.getBlob().getBytes()));

          if (attachmentHash === existingFileHash) {
            isDuplicate = true;
            break;
          }
        }

        if (!isDuplicate) {
          folder.createFile(attachment);
        }
      }
    }
  }
}

Дуже зручний сценарій, якщо ви часто отримуєте важливі вкладення електронною поштою. Це дозволить не лише зберегти вкладення, але й згрупувати їх разом у набагато кращому інтерфейсі для керування ними.

Цей сценарій закодовано для роботи лише з новими електронними листами, які ви отримаєте після першого запуску. Він автоматично створить нову папку під назвою «Вкладення електронної пошти» на Диску Google, якщо вона недоступна. Я також уникав використання імен для перевірки дублікатів файлів, оскільки вони можуть бути однаковими для різних файлів. Натомість сценарій перевіряє хеш-значення MD5, яке є унікальним на основі вмісту файлу.

Я знаю, що не всі хочуть зберігати лише нові вкладення, а також можуть захотіти вкладення з уже отриманих електронних листів. Для цього нижче наведено змінений сценарій, який дотримується тих самих правил, але натомість зберігає вкладення з поточних електронних листів. Однак, щоб зберегти все, знадобиться досить багато часу, залежно від того, скільки вкладень у вас є.

function saveAllAttachmentsToDrive() {
  var folderName = "Email Attachments";
  var folderIterator = DriveApp.getFoldersByName(folderName);
  var folder;
  
  if (folderIterator.hasNext()) {
    folder = folderIterator.next();
  } else {
    folder = DriveApp.createFolder(folderName);
  }

  var threads = GmailApp.getInboxThreads();

  for (var i = 0; i < threads.length; i++) {
    var messages = threads[i].getMessages();
    
    for (var j = 0; j < messages.length; j++) {
      var message = messages[j];
      var attachments = message.getAttachments();
      
      for (var k = 0; k < attachments.length; k++) {
        var attachment = attachments[k];
        var attachmentHash = Utilities.base64Encode(Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, attachment.getBytes()));
        var existingFiles = folder.getFiles();
        var isDuplicate = false;

        while (existingFiles.hasNext()) {
          var existingFile = existingFiles.next();
          var existingFileHash = Utilities.base64Encode(Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, existingFile.getBlob().getBytes()));

          if (attachmentHash === existingFileHash) {
            isDuplicate = true;
            break;
          }
        }

        if (!isDuplicate) {
          folder.createFile(attachment);
        }
      }
    }
  }
}

Отримуйте щоденні надихаючі цитати

function sendDailyQuoteEmail() {
  var apiKey = 'YOUR_API_KEY';
  var endpoint="https://quotes.rest/qod";

  var response = UrlFetchApp.fetch(endpoint, {
    headers: {
      'X-TheySaidSo-Api-Secret': apiKey
    }
  });

  var data = JSON.parse(response.getContentText());
  var quoteContents = data.contents.quotes[0];
  var quote = quoteContents.quote;
  var author = quoteContents.author;

  var recipient="[email protected]";
  var subject="Daily Quote";
  var message = `Here is your daily quote:\n\n"${quote}"\n\n- ${author}`;

  GmailApp.sendEmail(recipient, subject, message);
}

Можливо, він не має прямого використання у вашій роботі чи управлінні електронною поштою, але він чудовий для того, щоб зарядитися, щоб щодня викладати всі сили прямо у папці «Вхідні». Якщо правильно налаштувати цей сценарій, він використовуватиме API They Said So, щоб надсилати вам свою щоденну надихаючу цитату електронною поштою. Ось як це налаштувати:

По-перше, вам потрібен особистий ключ API від They Said So. На Вони так сказали API Ви можете зареєструвати безкоштовний обліковий запис, щоб отримати ключ. Він дає 5 безкоштовних дзвінків, що більш ніж достатньо для щоденної цитати.

Отримавши ключ, замініть частину YOUR_API_KEY фактичним ключем, який ви отримали від They Said So. Вам також потрібно замінити [email protected] розділіть свою фактичну адресу електронної пошти або чиюсь іншу, якщо ви хочете налаштувати її для когось іншого.

Тепер усе, що вам потрібно зробити, це налаштувати тригер, який запускатиметься щодня, оскільки його запуск раніше цього призведе до повторного надсилання котирування лише поточного дня.

Заключні слова

У мене особисто не було жодних проблем із запуском усіх цих сценаріїв разом, і я також не досягав щоденної квоти. Я впевнений, що у вас теж все буде добре, якщо ви не будете використовувати надто агресивні тригери. Ви також повинні постійно перевіряти ці сценарії, щоб переконатися, що жоден сценарій не стикається з помилками.

  6 найкращих програм для будильників, які змусять вас встати з ліжка