6 projektów skryptów Google Apps, które usprawnią korzystanie z Gmaila

Po raz kolejny jestem tutaj, aby porozmawiać o produktywności i automatyzacji w Gmailu. Tym razem przejdziemy w tryb pełnego maniaka i będziemy używać Google Apps Script, aby ulepszyć działanie Gmaila.

Gmail ma wiele wbudowanych ustawień, które możesz dostosować, aby zautomatyzować zadania i zwiększyć produktywność. Ma jednak swoje ograniczenia i wiele funkcji nie oferuje wystarczających opcji dostosowywania. Tutaj możesz wziąć sprawy w swoje ręce, korzystając z Google Apps Script.

Dzięki niemu możesz tworzyć niestandardowe skrypty, które mogą wykonywać zadania, których Gmail natywnie nie może. Co więcej, możesz ustawić wyzwalacze oparte na czasie, aby zautomatyzować te skrypty.

Na początek podaję kilka przydatnych skryptów, które z pewnością poprawią komfort korzystania z Gmaila. Zadbałem o to, aby każdy skrypt automatycznie rozwiązywał typowe problemy, takie jak duplikaty czy automatyczne tworzenie nowego folderu. Dlatego niektóre skrypty mogą wydawać się nieco dłuższe niż ich zamierzone przeznaczenie.

Utwórz skrypt w skrypcie Google Apps

Zanim zaczniesz stosować i dostosowywać te skrypty, musisz wiedzieć, jak utworzyć skrypt w Google Apps Script i go uruchomić. Oto jak:

Otwórz skrypt Google Apps i kliknij przycisk Nowy projekt w lewym panelu.

Tutaj musisz usunąć cały już napisany kod i skopiować/wkleić skrypt, który dostarczę. Następnie kliknij przycisk Zapisz, aby zapisać skrypt.

Aby wykonać skrypt, kliknij przycisk Uruchom tuż obok opcji Zapisz. Zostaniesz poproszony o nadanie uprawnień i pojawi się ostrzeżenie, że skrypt nie został zweryfikowany. Możesz zignorować ostrzeżenie i udzielić uprawnień, ponieważ skrypt jest przeznaczony do użytku osobistego i Google go nie sprawdził.

To wszystko, skrypt zostanie uruchomiony i pokaże w dzienniku wykonania, czy został pomyślnie wykonany, czy nie.

Skonfiguruj wyzwalacz

Wiele z tych skryptów działa najlepiej, gdy są uruchamiane automatycznie. Na szczęście Google Apps Script zawiera również sekcję umożliwiającą tworzenie wyzwalaczy opartych na czasie dla każdego skryptu, dzięki czemu uruchamiają się automatycznie.

Zanim jednak opowiem Ci o tworzeniu wyzwalacza, powinieneś to wiedzieć Skrypt Google Apps ma ograniczone przydziały w zależności od tego, czy subskrybujesz usługę abonament Google Workspace albo nie. Jeśli masz zbyt wiele skryptów uruchomionych jednocześnie i zbyt często, możesz osiągnąć dzienny limit, co spowoduje chwilowe zatrzymanie usługi.

Nawet jeśli masz możliwość wykonywania skryptów co minutę, byłoby to ogromne obciążenie dla Twojego dziennego limitu. Upewnij się, że ustawiłeś tylko taki timer, który niezawodnie wykona zadanie.

Aby utworzyć wyzwalacz, kliknij Wyzwalacze w lewym panelu, gdy skrypt jest otwarty, a następnie kliknij przycisk Dodaj wyzwalacz.

Tutaj możesz wybrać timer w minutach do miesięcy i odstęp. Możesz także wybrać stałą datę i godzinę, aby uruchomić skrypt tylko raz o określonej godzinie. Po wybraniu wszystkich kliknij Zapisz, aby utworzyć wyzwalacz.

Jeśli nie udzieliłeś pozwolenia na uruchomienie skryptu, tak jak mówiłem wcześniej, zostaniesz poproszony o wyrażenie zgody przed utworzeniem wyzwalacza.

W zależności od dokonanego wyboru wyzwalacz będzie działał w sposób ciągły. Jeśli napotka jakiś problem, powiadomi Cię o błędzie, który wystąpił.

Przyjrzyjmy się teraz praktycznym przykładom wykorzystania skryptu Google Apps Script do automatyzacji zadań w Gmailu.

Wysyłaj powtarzające się e-maile

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

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

Gmail umożliwia planowanie e-maili, ale nie e-maili cyklicznych. Niezależnie od tego, czy chcesz komuś o czymś przypomnieć, czy też chcesz mieć pewność, że Twój e-mail nie zostanie przeoczony. Ten prosty skrypt wysyła wiadomość e-mail na podany adres z podanym tematem i wiadomością. Następnie możesz skonfigurować wyzwalacz cykliczny za pomocą opcji Wyzwalacze.

W skrypcie edytuj sekcję odbiorcy, tematu i wiadomości, podając rzeczywiste szczegóły. Upewnij się, że cudzysłowy wokół przykładowego tekstu pozostają. Przykładowo temat powinien wyglądać tak:

var subject = "Important Reminder";

Ponieważ wyzwalacze mają maksymalny limit do miesiąca, wiadomość cykliczna musi być wysyłana raz w miesiącu. Niestety oznacza to, że nie można za jego pomocą wysyłać życzeń z okazji okazji, które zdarzają się raz w roku.

Filtruj wiadomości e-mail za pomocą łączy do etykiety

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);
}

E-maile z linkami w treści są zazwyczaj ważniejsze. Niezależnie od tego, czy otrzymujesz raporty od współpracownika, czy subskrybujesz biuletyny wysyłające określone zasoby, kategoryzowanie e-maili za pomocą linków może być bardzo przydatne.

Ten skrypt sprawdza wszystkie nieprzeczytane e-maile na Twoim koncie Gmail i oddziela te z linkami w treści wiadomości e-mail, tworząc nową etykietę o nazwie „E-maile z linkami”. Domyślnie będzie szukać e-maili wszędzie w Gmailu, ale możesz zawęzić wyszukiwanie, edytując var threads = GmailApp.search(’is:unread’); linia. Poniżej znajduje się kilka sposobów edycji:

Szukaj tylko w skrzynce odbiorczej: var threads = GmailApp.search(’in:inbox is:unread’);

Szukaj w innych etykietach: var threads = GmailApp.search(’in:inbox to:nieprzeczytane OR w:promocje to:nieprzeczytane OR w:ważne to:nieprzeczytane’);

Przeszukaj wszystkie przeczytane/nieprzeczytane e-maile w skrzynce odbiorczej: var threads = GmailApp.search(’in:inbox’);

Wyszukaj e-maile od określonego nadawcy: var threads = GmailApp.search(’from:[email protected]’);

Te przykłady powinny dać ci wyobrażenie o tym, jak możesz edytować skrypt, aby zawęzić liczbę e-maili z linkami. Uważam też, że ustawienie codziennego wyzwalacza będzie więcej niż wystarczające w przypadku tego typu e-maili.

Automatycznie usuwaj stare e-maile

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

Jeśli nie chcesz zachować starych e-maili, możesz użyć tego skryptu, aby usunąć e-maile starsze niż określony okres. Poniższy skrypt wyszuka wszystkie e-maile starsze niż 30 dni w Gmailu i wyśle ​​je do Kosza. Możesz edytować część „starszy_niż:30d”, aby określić, ile starych e-maili chcesz usunąć, np. „starszy_niż:180d”.

Jeśli zamiast tego chcesz usunąć e-maile z określoną etykietą, możesz edytować część Gmail.App.search, aby uwzględnić tę etykietę. Lubię to:

var wątki = GmailApp.search(’w:skrzynce odbiorczej starsze niż:30d’);

Aby proces był automatyczny, utwórz wyzwalacz, który automatycznie uruchamia skrypt co kilka dni. W zależności od tego, ile starych e-maili chcesz usunąć, jestem pewien, że cotygodniowy lub nawet miesięczny wyzwalacz będzie w porządku.

Zapisz wszystkie adresy e-mail w Arkuszach 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]]);
  }
}

Ten skrypt przeszuka Gmaila w poszukiwaniu wszystkich e-maili, skopiuje nazwy i adresy e-mail nadawców/odbiorców i zapisze je w Arkuszach Google. Może to mieć wiele zastosowań, na przykład utworzenie listy mailingowej do celów marketingu e-mailowego lub utworzenie rejestru wszystkich osób, które się z Tobą kontaktują.

Tworzenie tego skryptu różni się jednak nieco od innych, ponieważ należy otworzyć skrypt Google Apps z poziomu Arkuszy Google, aby mógł zidentyfikować arkusz. Trzeba to jednak zrobić tylko po raz pierwszy. Oto jak:

Otwórz nowy arkusz w Arkusze Google. Tutaj kliknij Rozszerzenia w powyższym menu, a następnie wybierz Apps Script. Spowoduje to otwarcie skryptu Google Apps Script. Możesz dodać skrypt i uruchomić go, jak pokazałem wcześniej.

Skrypt utworzy nowy arkusz o nazwie „Adresy e-mail” z nazwą i adresem e-mail zapisanymi w tej samej komórce. Nie będziesz musiał w przyszłości ponownie otwierać arkusza dla każdego wyzwalacza. Każdy nowy adres e-mail zostanie zaktualizowany w arkuszu na końcu bez żadnych duplikatów.

W zależności od tego, jak często otrzymujesz e-maile od nowych nadawców, dobry powinien być wyzwalacz dzienny lub tygodniowy.

Automatycznie zapisuj załączniki do wiadomości e-mail na Dysku Google

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);
        }
      }
    }
  }
}

Bardzo przydatny skrypt, jeśli często otrzymujesz ważne załączniki pocztą elektroniczną. Spowoduje to nie tylko zachowanie załączników, ale także zgrupowanie ich w znacznie lepszy interfejs do zarządzania nimi.

Ten skrypt jest zakodowany tak, aby działał tylko z nowymi e-mailami, które otrzymasz po pierwszym uruchomieniu. Automatycznie utworzy nowy folder o nazwie „Załączniki e-maili” na Dysku Google, jeśli nie będzie dostępny. Unikałem również używania nazw do sprawdzania duplikatów plików, ponieważ mogą one być takie same dla różnych plików. Zamiast tego skrypt sprawdza wartość skrótu MD5, która jest unikalna na podstawie zawartości pliku.

Wiem, że nie każdy chce zapisywać tylko nowe załączniki i może chcieć także załączników z już otrzymanych e-maili. W tym celu poniżej znajduje się zmodyfikowany skrypt, który działa zgodnie z tymi samymi zasadami, ale zamiast tego zapisuje załączniki z aktualnie obecnych wiadomości e-mail. Jednak zapisanie wszystkiego zajmie trochę czasu, w zależności od liczby posiadanych załączników.

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);
        }
      }
    }
  }
}

Otrzymuj codzienny inspirujący cytat

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);
}

Być może nie będzie to miało bezpośredniego zastosowania w Twojej pracy ani w zarządzaniu pocztą e-mail, ale świetnie nadaje się do nabrania energii i dzielenia się każdym dniem bezpośrednio w skrzynce odbiorczej. Po prawidłowym skonfigurowaniu ten skrypt będzie korzystał z interfejsu API They Said So, aby wysyłać Ci codzienne inspirujące cytaty pocztą elektroniczną. Oto jak to skonfigurować:

Najpierw potrzebujesz osobistego klucza API od They Said So. Na Tak powiedzieli API stronie możesz zarejestrować darmowe konto, aby otrzymać klucz. Daje 5 połączeń za darmo, co w zupełności wystarczy na codzienną wycenę.

Gdy już zdobędziesz klucz, zastąp część YOUR_API_KEY rzeczywistym kluczem otrzymanym od „Tak powiedzieli”. Trzeba także wymienić [email protected] podaj swój rzeczywisty adres e-mail lub adres innej osoby, jeśli chcesz skonfigurować go dla kogoś innego.

Teraz wszystko, co musisz zrobić, to skonfigurować wyzwalacz, który będzie uruchamiany codziennie, ponieważ uruchomienie go wcześniej spowoduje ponowne wysłanie jedynie wyceny z bieżącego dnia.

Ostatnie słowa

Osobiście nie miałem żadnego problemu z uruchomieniem wszystkich tych skryptów razem, ani też nie osiągnąłem dziennego limitu. Jestem pewien, że tobie też nic się nie stanie, o ile nie użyjesz zbyt agresywnych wyzwalaczy. Powinieneś także sprawdzać te skrypty, aby upewnić się, że żaden skrypt nie zawiera błędów.