Artykuł

developers.google.com/apps-script/ developers.google.com/apps-script/
wrz 08 2013
0

Piszemy skrypt do automatycznego czyszczenia poczty w Gmailu

Mimo że nie do końca podobają mi się ostatnie poczynania Google w niektórych obszarach jego działalności, wciąż bardzo lubię usługi tej firmy i mimo wielu licznych prób nie udało mi się znaleźć godnych uwagi odpowiedników. Być może gdybym zmienił platformę mobilną, to byłoby łatwiej, ja jednak wciąż trwam wiernie przy Androidzie no i nie ukrywam, że po prostu jest mi tak wygodnie.

Wróćmy jednak do meritum tematu. Kluczowe usługi Google zna każdy. Znane są wady i zalety tych rozwiązań. Z reguły są to naprawdę dopracowane i funkcjonalne produkty, z drugiej jednak strony czasem nie posiadają prozaicznych wręcz funkcjonalności.

Spójrzmy na taki Gmail, który cieszy się naprawdę sporą liczbą dostępnych opcji, z drugiej zaś strony brakuje tu czasem podstawowych elementów takich jak np. możliwość przypisania wielu sygnatur dla jednego adresu, czy opcja wysłania maila z potwierdzeniem przeczytania. Mi osobiście brakuje również możliwości automatycznego usuwania elementów z określonych etykiet po zadanej liczbie dni (taki auto-sprzątacz dla starych newsletterów). Nie wydaje mi się, by Google zajął się powyższymi tematami w najbliższym czasie, ale na nasze szczęście na horyzoncie są inne możliwości i nie mam tu na myśli bynajmniej znalezienia konta u innego dostawcy poczty;-)

Poznajcie Google Apps Script

Być może słyszeliście już wcześniej o Google Apps Script, a być może nigdy nie spotkaliście się z tym tematem. Uszczęśliwię Was na siłę i powiem pokrótce z czym mamy do czynienia;-)

Google Apps Script to specjalna platforma od Google, która umożliwia rozszerzenie kluczowych produktów giganta z Mountain View o nowe, dopasowane stricte dla nas funkcjonalności. W tym celu oddano w nasze ręce specjalną platformę, na której za pomocą JavaScriptu oraz specjalnego Google API, możemy tworzyć własne projekty. Projekt to w wielu przypadkach szumne słowo - czasem do zrealizowania ciekawej funkcjonalności wystarczy kilkunastu liniowa funkcja JS.

Google Apps Script nie jest tylko prostym edytorem dla skryptów, to całkiem spora platforma która pozwala nam np. na rutynowe wyzwalanie wybranych funkcji. Dzięki temu otrzymujemy podobne rozwiązanie do popularnego w środowiskach UNIXowych Crona. Nie musimy się również troszczyć o jakiekolwiek uprawnienia, ponieważ w tym przypadku wszystko zostaje w rodzinie. Napisany skrypt można udostępnić również innym użytkownikom.

Z kluczowymi możliwościami platformy możecie zapoznać się tutaj.

Google Apps Script - pierwsze kroki

Aby rozpocząć pracę z nową usługą, należy się udać pod adres script.google.com. Tutaj na wejściu należy wybrać rodzaj tworzonego projektu. W naszym przypadku możemy wybrać albo projekt pusty, albo Gmail. Wybierając opcję numer 2, będziemy mogli obejrzeć przykładowe funkcje, które odwołują się do specjalnego API naszej ulubionej skrzynki pocztowej. Wydaje mi się, że warto podejrzeć wygenerowany przez Google kod - można go bez problemu skasować w sytuacji gdy nie będzie on nam do niczego sensownego potrzebny.

Jeśli pójdziecie za moją radą, to na Waszym ekranie pojawi się okno mini platformy przygotowanej do tworzenia skryptów. W tym przypadku na wejściu otrzymamy trzy gotowe funkcje, które choć nie robią tutaj jakiś wielkich magicznych operacji, to jednak pozwalają w minimalny sposób na liźnięcie Gmail API.

Same okno edytora jest bardzo proste w obsłudze i zasadniczo sprowadza się do obsługi ikonek widocznych na pasku narzędziowym. Omówię je pokrótce, zaczynając od lewej strony:

  • Operacja cofnij
  • Operacja powtórz
  • Wcięcie - nie wiem dokładnie jak działa ten przycisk, myślałem że chodzi o formatowanie - wcinanie tekstu, ale jakoś coś nie funkcjonuje...
  • Zapisz - zapisuje aktualny plik. W sytuacji gdy jest to nowy projekt, to musimy również podać nazwę samego projektu
  • Wdróż jako aplikacje internetową - robi dokładnie to co mówi - dzięki tej opcji będziemy mogli udostępnić nasz projekt innym użytkownikom, za pomocą uzyskanego w tej operacji adresu URL
  • Wyzwalacze bieżącego projektu - pozwala na ustalenie triggerów, które pozwolą na uruchamianie skryptu w określonych warunkach - głównie to są ustawienia powiązane z czasem np. uruchom skrypt w każdy poniedziałek o północy
  • Uruchom & Debuguj - robią dokładnie to co przedstawia ich nazwa. Oba przyciski stają się aktywne dopiero po wybraniu odpowiedniej funkcji z listy rozwijanej umieszczonej na kolejnej pozycji

Jeśli chcemy przetestować wybraną funkcję, to musimy ją najpierw oczywiście ją napisać, później zapisać projekt i uruchomić go. W kolejnym kroku potrzebna będzie jej autoryzacja na naszym koncie Google (jest to swego rodzaju zabezpieczenie, przed potencjalnie niebezpiecznym kodem). Po przejściu całego procesu, funkcja uruchomi się jednorazowo. Później możemy ją uruchamiać ręcznie na żądanie, albo ustanowić odpowiednie wyzwalacze.

Posprzątajmy tu! Usuwamy stare niepotrzebne maile

Jeśli śledziliście moje wcześniejsze posty na temat Gmaila to mam nadzieję, że nie przegapiliście tego, w którym wspominałem o filtrach, ponieważ treści tam zawarte będą nam dzisiaj bardzo potrzebne.

Generalnie naszym zadaniem jest utworzenie skryptu, który będzie usuwał stare maile (starsze niż 14 dni) z wybranej etykiety. Wymyśliłem sobie taką koncepcję, żeby odpowiednio wyfiltrować całą pocztę i w jednym miejscu umieścić wszystkie newslettery. Ponieważ tego rodzaju korespondencji zbiera się całkiem sporo, warto ją regularnie kasować. W tym celu można zrobić filtr(y) który albo zapina się na konkretny adres źródłowy, albo reaguje np. na słowo newsletter w tytule. W ten sposób bardzo łatwo jest zgromadzić całą najmniej pasjonującą pocztę w jednym miejscu. I tak, zdaję sobie sprawę że filtry w Google są już passé, ale osobiście nie mogę się przekonać do nowych zakładek.

Mając już odpowiedni filtr oraz etykietę, możemy przystąpić do programowania. W tym celu należy otworzyć oczywiście edytor skryptów Google oraz wkleić poniższy kod:

function cleanUp() {
  var delayDays = 14
  var maxDate = new Date();
  maxDate.setDate(maxDate.getDate()-delayDays);
  var label = GmailApp.getUserLabelByName("newsletter");
  var threads = label.getThreads();
  for (var i = 0; i < threads.length; i++) {
    if (threads[i].getLastMessageDate() < maxDate)
      {
        threads[i].moveToTrash();
      }
  }
}

Wykorzystałem tutaj skrypt Johna Day'a, który już wcześniej pochylił się nad tym tematem - nie ma więc sensu wymyślać koła od nowa. Warto tu jednak omówić parę kwestii.

W linii 2, podajemy liczbę dni przez jaką nowa poczta z etykiety newsletter będzie bezpieczna. Kluczowa jest również linia 5, ponieważ w wywołaniu Gmailowej funkcji getUserLabelByName, podajemy nazwę etykiety, której cała operacja ma dotyczyć. Oczywiście wystarczy delikatnie zmodyfikować skrypt, by utworzyć tablicę etykiet, a następnie iterować po kolejnych jej elementach.

W kolejnym kroku pobieramy wątki do tablicy (6), po której później iterujemy (7-12) i w razie potrzeby przenosimy starszą korespondencję do kosza (8-11). I to jest zasadniczo wszystko.

Aby przetestować skrypt, wystarczy zgodnie z tym co pisałem wcześniej zapisać projekt, a następnie go uruchomić oraz autoryzować. W sytuacji gdy chcecie regularnie z niego korzystać, potrzeba oczywiście odpowiednio ustawić wyzwalacze.

Powyższy skrypt to tylko przykład - możliwości jest znacznie więcej. Zachęcam do czytania dokumentacji i samodzielnego eksperymentowania, choć w takim przypadku trzeba oczywiście uważać by przez przypadek nie usunąć jakiejś naprawdę potrzebnej poczty;-)

Podoba Ci się ten wpis? Powiedz o tym innym!

Send to Kindle

Komentarze

blog comments powered by Disqus