Raz jeszcze poruszamy temat produktywności i automatyzacji w Gmailu. Tym razem wkraczamy na wyższy poziom zaawansowania, wykorzystując Google Apps Script do usprawnienia funkcjonalności Gmaila.
Gmail oferuje szereg wbudowanych opcji, które pozwalają zautomatyzować zadania i zwiększyć efektywność. Niemniej jednak ma pewne ograniczenia, a niektóre funkcje nie zapewniają wystarczających możliwości personalizacji. W tym miejscu z pomocą przychodzi Google Apps Script, dając Ci pełną kontrolę.
Dzięki niemu masz możliwość tworzenia spersonalizowanych skryptów, które wykonują zadania niedostępne natywnie w Gmailu. Co więcej, możesz ustalić harmonogram uruchamiania tych skryptów, korzystając z wyzwalaczy czasowych.
Na początek prezentuję kilka przydatnych skryptów, które bez wątpienia poprawią komfort Twojej pracy z Gmaila. Zadbałem o to, aby każdy skrypt automatycznie radził sobie z typowymi problemami, takimi jak duplikaty czy automatyczne zakładanie nowych folderów. Dlatego niektóre skrypty mogą wydawać się nieco bardziej rozbudowane, niżby wynikało to z ich podstawowej funkcji.
Tworzenie skryptu w Google Apps Script
Zanim zaczniesz korzystać z tych skryptów, musisz nauczyć się, jak utworzyć skrypt w Google Apps Script i jak go uruchomić. Oto instrukcja:
Otwórz Google Apps Script i w lewym panelu kliknij opcję „Nowy projekt”.
W tym miejscu usuń cały domyślny kod i skopiuj/wklej skrypt, który Ci udostępnię. Następnie kliknij „Zapisz”, aby zapisać skrypt.
Aby uruchomić skrypt, kliknij przycisk „Uruchom” obok opcji „Zapisz”. Zostaniesz poproszony o nadanie uprawnień i wyświetli się ostrzeżenie o braku weryfikacji skryptu. Możesz zignorować to ostrzeżenie i udzielić uprawnień, ponieważ skrypt jest przeznaczony do użytku osobistego i nie jest sprawdzany przez Google.
To wszystko, skrypt zostanie uruchomiony, a w dzienniku wykonania zobaczysz, czy przebiegł pomyślnie.
Konfiguracja wyzwalacza
Wiele z tych skryptów najlepiej działa, gdy są uruchamiane automatycznie. Na szczęście Google Apps Script oferuje funkcję tworzenia wyzwalaczy czasowych, które automatycznie uruchamiają skrypty.
Zanim jednak zaczniesz tworzyć wyzwalacze, musisz wiedzieć, że Google Apps Script ma ograniczone limity, zależne od tego, czy masz subskrypcję Google Workspace, czy nie. Uruchamianie zbyt wielu skryptów jednocześnie lub zbyt często może wyczerpać dzienny limit, co spowoduje czasowe wstrzymanie usługi.
Nawet jeśli masz możliwość uruchamiania skryptów co minutę, nadmierne korzystanie z tej opcji szybko wyczerpie Twój dzienny limit. Zawsze ustawiaj taki interwał uruchamiania, który skutecznie zrealizuje zadanie.
Aby stworzyć wyzwalacz, w otwartym skrypcie wybierz „Wyzwalacze” w lewym panelu, a następnie kliknij „Dodaj wyzwalacz”.
W tym miejscu możesz ustawić timer w minutach, godzinach, dniach, tygodniach lub miesiącach, a także określić interwał. Możesz również wybrać stałą datę i godzinę, aby skrypt uruchomił się jednorazowo o konkretnej porze. Po dokonaniu ustawień kliknij „Zapisz”, aby utworzyć wyzwalacz.
Jeśli wcześniej nie udzieliłeś zgody na uruchomienie skryptu, jak wspomniałem, zostaniesz o nią poproszony przed utworzeniem wyzwalacza.
W zależności od wybranych ustawień, wyzwalacz będzie działał w sposób ciągły. W przypadku wystąpienia problemu, powiadomi Cię o ewentualnych błędach.
Przejdźmy teraz do praktycznych przykładów zastosowania skryptów Google Apps Script w celu automatyzacji zadań w Gmailu.
Wysyłanie cyklicznych wiadomości e-mail
function sendRecurringEmail() { var recipient = "[email protected]"; var subject = "Twój temat"; var message = "Twoja wiadomość"; GmailApp.sendEmail(recipient, subject, message); }
Gmail umożliwia planowanie wysyłki e-maili, ale nie oferuje funkcji wysyłania wiadomości cyklicznych. Niezależnie od tego, czy chcesz komuś przypomnieć o czymś, czy chcesz mieć pewność, że Twoja wiadomość nie zostanie pominięta, ten prosty skrypt wyśle e-mail na wskazany adres, z określonym tematem i treścią. Następnie możesz ustawić cykliczny wyzwalacz w sekcji „Wyzwalacze”.
W skrypcie edytuj sekcje adresata, tematu i wiadomości, wprowadzając odpowiednie informacje. Upewnij się, że cudzysłowy otaczające przykładowy tekst zostaną zachowane. Na przykład temat powinien wyglądać tak:
var subject = "Ważne przypomnienie";
Ponieważ wyzwalacze mają maksymalny limit ustawienia na miesiąc, cykliczna wiadomość musi być wysyłana raz w miesiącu. Niestety, nie możesz za jego pomocą wysyłać życzeń na okazje, które przypadają raz w roku.
Filtrowanie wiadomości e-mail z linkami i oznaczanie ich etykietą
function processUnreadEmailsWithLinks() { var labelName="E-maile z linkami"; 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); }
Wiadomości e-mail z linkami często mają większe znaczenie. Niezależnie od tego, czy otrzymujesz raport od współpracownika, czy subskrybujesz newslettery z cennymi zasobami, kategoryzacja wiadomości e-mail zawierających linki może być bardzo przydatna.
Ten skrypt analizuje wszystkie nieprzeczytane wiadomości e-mail na Twoim koncie Gmail i wyodrębnia te, które zawierają linki w treści, oznaczając je nową etykietą o nazwie „E-maile z linkami”. Domyślnie skrypt przeszukuje całą pocztę Gmail, ale możesz zawęzić zakres wyszukiwania, edytując linię kodu var threads = GmailApp.search(’is:unread’);. Poniżej przedstawiam kilka przykładów modyfikacji:
Wyszukiwanie tylko w skrzynce odbiorczej: var threads = GmailApp.search(’in:inbox is:unread’);
Wyszukiwanie w innych etykietach: var threads = GmailApp.search(’in:inbox to:nieprzeczytane OR in:promocje to:nieprzeczytane OR in:ważne to:nieprzeczytane’);
Wyszukiwanie wszystkich przeczytanych/nieprzeczytanych wiadomości e-mail w skrzynce odbiorczej: var threads = GmailApp.search(’in:inbox’);
Wyszukiwanie wiadomości od określonego nadawcy: var threads = GmailApp.search(’from:[email protected]’);
Te przykłady powinny dać Ci ogólne pojęcie, jak modyfikować skrypt, aby zawęzić liczbę przeszukiwanych wiadomości e-mail. Myślę, że ustawienie dziennego wyzwalacza będzie w zupełności wystarczające w przypadku tego typu wiadomości.
Automatyczne usuwanie starych wiadomości e-mail
function deleteOldEmails() { var threads = GmailApp.search('older_than:30d'); for (var i = 0; i < threads.length; i++) { threads[i].moveToTrash(); } }
Jeśli nie chcesz przechowywać starych wiadomości e-mail, możesz użyć tego skryptu do usuwania wiadomości starszych niż określony czas. Poniższy skrypt przeszuka wszystkie wiadomości e-mail starsze niż 30 dni i przeniesie je do Kosza. Możesz edytować fragment „older_than:30d”, aby dostosować zakres usuwania, na przykład: „older_than:180d”.
Jeśli chcesz usunąć wiadomości e-mail z konkretną etykietą, możesz edytować fragment Gmail.App.search, uwzględniając tę etykietę. Na przykład:
var threads = GmailApp.search(’in:inbox older_than:30d’);
Aby proces ten był zautomatyzowany, utwórz wyzwalacz, który będzie uruchamiał skrypt automatycznie co kilka dni. W zależności od tego, ile starych wiadomości chcesz usunąć, tygodniowy lub nawet miesięczny wyzwalacz powinien być wystarczający.
Zapisywanie wszystkich adresów e-mail w Arkuszach Google
function getEmailAddresses() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheetName = "Adresy e-mail"; var sheet = ss.getSheetByName(sheetName); if (!sheet) { sheet = ss.insertSheet(sheetName); sheet.appendRow(["Adres e-mail"]); } 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 przeszukuje skrzynkę Gmail, analizuje wszystkie wiadomości i zapisuje adresy e-mail nadawców/odbiorców w Arkuszach Google. Może to być przydatne w wielu sytuacjach, np. do utworzenia listy mailingowej do celów marketingowych lub utworzenia rejestru wszystkich kontaktujących się z Tobą osób.
Proces tworzenia tego skryptu różni się nieco od pozostałych, ponieważ należy go uruchomić z poziomu Arkuszy Google, aby mógł on zidentyfikować arkusz. Jest to jednak czynność jednorazowa. Oto instrukcja:
Otwórz nowy arkusz w Arkusze Google. Następnie w menu wybierz opcję „Rozszerzenia”, a potem „Apps Script”. Spowoduje to otwarcie edytora Google Apps Script. Wklej skrypt i uruchom go, jak opisałem wcześniej.
Skrypt utworzy nowy arkusz o nazwie „Adresy e-mail” i zapisze w nim nazwy i adresy e-mail w tej samej kolumnie. Nie będziesz musiał ponownie otwierać arkusza przy każdym uruchomieniu wyzwalacza. Każdy nowy adres e-mail będzie dopisywany na końcu arkusza, bez powielania.
W zależności od częstotliwości otrzymywania wiadomości od nowych nadawców, wyzwalacz ustawiony na dzień lub tydzień powinien być wystarczający.
Automatyczne zapisywanie załączników z wiadomości e-mail na Dysku Google
function onNewEmail(e) { var threads = GmailApp.getInboxThreads(0, 1); var messages = threads[0].getMessages(); var folderName = "Załączniki e-maili"; 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); } } } } }
Ten skrypt jest bardzo przydatny, jeśli często otrzymujesz ważne załączniki pocztą elektroniczną. Nie tylko zachowuje on załączniki, ale także grupuje je, co ułatwia ich zarządzanie.
Ten skrypt jest tak skonstruowany, aby działał tylko dla nowych wiadomości e-mail, które otrzymasz po pierwszym uruchomieniu. Automatycznie utworzy on nowy folder o nazwie „Załączniki e-maili” na Dysku Google, jeśli jeszcze nie istnieje. Unikałem sprawdzania duplikatów plików po nazwach, ponieważ różne pliki mogą mieć taką samą nazwę. Zamiast tego skrypt sprawdza wartość skrótu MD5, który jest unikalny dla każdego pliku.
Wiem, że nie wszyscy chcą zapisywać tylko nowe załączniki, niektórzy mogą chcieć także załączniki z wcześniej otrzymanych wiadomości e-mail. Poniżej znajdziesz zmodyfikowany skrypt, który działa na tych samych zasadach, ale zapisuje załączniki z aktualnie znajdujących się w skrzynce odbiorczej wiadomości. Zapisanie wszystkich załączników może zająć trochę czasu, w zależności od ich liczby.
function saveAllAttachmentsToDrive() { var folderName = "Załączniki e-maili"; 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); } } } } }
Otrzymywanie codziennego inspirującego cytatu
function sendDailyQuoteEmail() { var apiKey = 'TWÓJ_KLUCZ_API'; 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="Cytat dnia"; var message = `Oto Twój cytat na dziś:\n\n"${quote}"\n\n- ${author}`; GmailApp.sendEmail(recipient, subject, message); }
Może nie ma to bezpośredniego związku z Twoją pracą ani zarządzaniem pocztą e-mail, ale jest to świetny sposób na nabranie energii i pozytywne rozpoczęcie każdego dnia. Ten skrypt będzie korzystał z API They Said So, aby wysyłać Ci codzienny inspirujący cytat na adres e-mail. Oto, jak go skonfigurować:
Najpierw musisz uzyskać osobisty klucz API od They Said So. Na stronie They Said So API możesz założyć bezpłatne konto, aby otrzymać klucz. Zapewnia 5 bezpłatnych połączeń API, co w zupełności wystarczy do pobierania codziennego cytatu.
Po uzyskaniu klucza, zastąp fragment „TWÓJ_KLUCZ_API” rzeczywistym kluczem otrzymanym od They Said So. Musisz też zamienić [email protected] na Twój własny adres e-mail lub adres kogoś, dla kogo chcesz to skonfigurować.
Teraz wystarczy ustawić wyzwalacz, który będzie uruchamiany codziennie, ponieważ wcześniejsze uruchomienie skryptu spowoduje ponowne przesłanie tego samego cytatu.
Słowo na koniec
Osobiście nie miałem żadnych problemów z jednoczesnym uruchamianiem wszystkich tych skryptów ani z osiąganiem dziennego limitu. Jestem przekonany, że u Ciebie również nie powinno wystąpić żadnych problemów, o ile nie ustawisz zbyt agresywnych wyzwalaczy. Powinieneś regularnie sprawdzać działanie tych skryptów, aby upewnić się, że nie zawierają żadnych błędów.
newsblog.pl
Maciej – redaktor, pasjonat technologii i samozwańczy pogromca błędów w systemie Windows. Zna Linuxa lepiej niż własną lodówkę, a kawa to jego główne źródło zasilania. Pisze, testuje, naprawia – i czasem nawet wyłącza i włącza ponownie. W wolnych chwilach udaje, że odpoczywa, ale i tak kończy z laptopem na kolanach.