Opět se s vámi dělím o poznatky z oblasti produktivity a automatizace v Gmailu. Tentokrát se ponoříme do hlubších vod a s využitím Google Apps Script vylepšíme váš Gmail.
Gmail nabízí spoustu zabudovaných nastavení pro automatizaci úkolů a zvýšení efektivity. Nicméně má své limity a mnoho funkcí nenabízí dostatečné možnosti přizpůsobení. Zde přichází na scénu Google Apps Script, s nímž můžete vzít věci do vlastních rukou.
S jeho pomocí můžete vytvářet skripty, které provedou akce, které Gmail sám neumí. A nejen to, můžete nastavit časové spouštěče pro automatické spouštění těchto skriptů.
Pro začátek vám představím několik užitečných skriptů, které zaručeně vylepší váš Gmail. Navrhl jsem je tak, aby automaticky řešily běžné problémy, jako jsou duplikáty nebo automatické vytváření nových složek. Proto se některé skripty mohou zdát o něco delší, než je jejich zamýšlený účel.
Vytvoření skriptu v Google Apps Script
Než začnete tyto skripty používat a upravovat, musíte vědět, jak skript vytvořit a spustit v Google Apps Script. Zde je postup:
Otevřete Google Apps Script a v levém panelu klikněte na tlačítko Nový projekt.
Zde musíte odstranit veškerý předepsaný kód a zkopírovat/vložit skript, který poskytnu. Poté kliknutím na tlačítko Uložit skript uložte.
Pro spuštění skriptu klikněte na tlačítko Spustit, které se nachází hned vedle tlačítka Uložit. Budete vyzváni k udělení oprávnění a zobrazí se varování, že skript nebyl ověřen. Toto varování můžete ignorovat a oprávnění udělit, protože skript je určen pro osobní použití a nebyl kontrolován společností Google.
A to je vše. Skript se spustí a v protokolu provedení se zobrazí, zda proběhl úspěšně, nebo ne.
Nastavení spouštěče
Mnoho z těchto skriptů je nejefektivnějších, když se spouštějí automaticky. Naštěstí Google Apps Script nabízí možnost vytvářet časové spouštěče pro každý skript, které se spouštějí automaticky.
Než si ale povíme o vytváření spouštěčů, měli byste vědět, že Google Apps Script má omezené kvóty, které se liší podle toho, zda máte předplatné Google Workspace, či nikoli. Pokud máte příliš mnoho skriptů spuštěných najednou a příliš často, můžete dosáhnout denní kvóty, která službu dočasně zastaví.
Ačkoli máte možnost spouštět skripty každou minutu, způsobilo by to velké zatížení vaší denní kvóty. Ujistěte se, že nastavujete pouze takový časovač, který práci spolehlivě provede.
Pro vytvoření spouštěče klikněte na Spouštěče v levém panelu, když máte skript otevřený, a poté klikněte na tlačítko Přidat spouštěč.
Zde si můžete vybrat časovač v rozmezí od minut po měsíce a nastavit interval. Můžete také zvolit pevné datum a čas, kdy se skript spustí pouze jednou. Po dokončení výběru klikněte na Uložit pro vytvoření spouštěče.
Pokud jste neudělili oprávnění ke spuštění skriptu, jak jsem uvedl dříve, budete o oprávnění požádáni před vytvořením spouštěče.
Spouštěč se bude spouštět nepřetržitě na základě vašeho výběru. Pokud nastane nějaký problém, obdržíte upozornění s informací o chybě, ke které došlo.
Nyní se pojďme podívat na několik praktických příkladů, jak můžete použít Google Apps Script k automatizaci úkolů v Gmailu.
Odesílání opakovaných e-mailů
function sendRecurringEmail() {
var recipient = "[email protected]";
var subject = "Váš předmět zde";
var message = "Vaše vlastní zpráva zde";
GmailApp.sendEmail(recipient, subject, message);
}
Gmail vám umožňuje plánovat odeslání e-mailů, ale neumí posílat opakované e-maily. Ať už chcete někomu něco připomenout, nebo se chcete ujistit, že váš e-mail nikdo nepřehlédne, tento jednoduchý skript odešle e-mail na zadanou adresu s předmětem a zprávou, které zadáte. Poté můžete v možnostech Spouštěče nastavit opakující se spouštěč.
Ve skriptu upravte příjemce, předmět a text zprávy s vašimi skutečnými údaji. Ujistěte se, že uvozovky kolem vzorového textu zůstanou zachovány. Například předmět by měl vypadat takto:
var subject = "Důležité připomenutí";
Vzhledem k tomu, že spouštěče mají maximální limit jeden měsíc, nejčastěji lze opakovanou zprávu odeslat jednou měsíčně. Bohužel to znamená, že ji nemůžete použít pro odesílání přání k příležitostem, které se opakují každý rok.
Filtrování e-mailů s odkazy pomocí štítku
function processUnreadEmailsWithLinks() {
var labelName="E-maily s odkazy";
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-maily, které obsahují odkazy, jsou obvykle důležitější. Ať už dostáváte zprávy od kolegů, nebo jste se přihlásili k odběru newsletterů, které zasílají konkrétní zdroje, kategorizace e-mailů s odkazy může být velmi užitečná.
Tento skript zkontroluje všechny nepřečtené e-maily ve vašem účtu Gmail a e-maily s odkazy v textu e-mailu přidá do nového štítku s názvem „E-maily s odkazy“. Ve výchozím nastavení bude hledat e-maily v celém Gmailu, ale vyhledávání můžete zúžit úpravou řádku `var threads = GmailApp.search(‚is:unread‘);`. Níže je několik způsobů, jak jej můžete upravit:
Vyhledávání pouze v doručené poště: `var threads = GmailApp.search(‚in:inbox is:unread‘);`
Vyhledávání v jiných štítcích: `var threads = GmailApp.search(‚in:inbox is:unread OR in:promotions is:unread OR in:important is:unread‘);`
Vyhledávání všech přečtených/nepřečtených e-mailů ve složce Doručená pošta: `var threads = GmailApp.search(‚in:inbox‘);`
Vyhledávání e-mailů od konkrétního odesílatele: `var threads = GmailApp.search(‚from:[email protected]‚);`
Tyto příklady by vám měly dát představu o tom, jak můžete skript upravit a zúžit vyhledávání e-mailů s odkazy. Také věřím, že denní spouštěč bude pro takové typy e-mailů více než dostatečný.
Automatické mazání starých e-mailů
function deleteOldEmails() {
var threads = GmailApp.search('older_than:30d');
for (var i = 0; i < threads.length; i++) {
threads[i].moveToTrash();
}
}
Pokud si nepřejete uchovávat staré e-maily, můžete použít tento skript k odstranění e-mailů, které jsou starší než určité období. Skript zde vyhledá všechny e-maily v Gmailu, které jsou starší než 30 dnů, a odešle je do koše. Část `’older_than:30d’` můžete upravit a určit, jak staré e-maily chcete smazat, například `’older_than:180d’`.
Pokud chcete namísto toho smazat e-maily z konkrétního štítku, můžete upravit část Gmail.App.search tak, aby štítek obsahovala. Takto:
var threads = GmailApp.search('in:inbox older_than:30d');
Chcete-li proces automatizovat, vytvořte spouštěč, který bude skript automaticky spouštět každých několik dní. V závislosti na tom, jak staré e-maily chcete mazat, jsem přesvědčen, že týdenní nebo i měsíční interval bude dostačující.
Ukládání všech e-mailových adres do Tabulek Google
function getEmailAddresses() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetName = "E-mailové adresy";
var sheet = ss.getSheetByName(sheetName);
if (!sheet) {
sheet = ss.insertSheet(sheetName);
sheet.appendRow(["E-mailová adresa"]);
}
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]]);
}
}
Tento skript prohledá Gmail a zkopíruje jména a e-mailové adresy odesílatelů/příjemců a uloží je do Tabulek Google. To může mít mnoho využití, například vytvoření seznamu adresátů pro e-mailový marketing nebo vytvoření záznamu o všech, kdo vás kontaktují.
Vytvoření tohoto skriptu se však od ostatních mírně liší, protože je třeba otevřít Google Apps Script z Tabulek Google, aby bylo možné identifikovat list. Ale stačí to udělat jen jednou. Zde je postup:
Otevřete nový list v Tabulkách Google. Zde klikněte na Rozšíření v horní nabídce a poté vyberte Apps Script. Tím se otevře Google Apps Script a vy můžete přidat skript a spustit jej, jak jsem uvedl dříve.
Skript vytvoří nový list s názvem „E-mailové adresy“ se jménem a e-mailovou adresou zapsanými ve stejném sloupci. V budoucnu nebudete muset list otevírat znovu pro každý spouštěč. Každá nová e-mailová adresa bude v listu na konci aktualizována, aniž by docházelo k duplicitám.
V závislosti na tom, jak často dostáváte e-maily od nových odesílatelů, bude vhodný denní nebo týdenní spouštěč.
Automatické ukládání příloh e-mailů na Disk Google
function onNewEmail(e) {
var threads = GmailApp.getInboxThreads(0, 1);
var messages = threads[0].getMessages();
var folderName = "Přílohy e-mailů";
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);
}
}
}
}
}
Velmi praktický skript, pokud často dostáváte důležité přílohy e-mailem. Nejenže uloží přílohy, ale také je seskupí do mnohem lepšího rozhraní pro jejich správu.
Tento skript je naprogramován tak, aby fungoval pouze na nové e-maily, které obdržíte po prvním spuštění. Automaticky vytvoří novou složku s názvem „Přílohy e-mailů“ na Disku Google, pokud ještě neexistuje. Také jsem se vyhnul používání názvů souborů pro kontrolu duplicit, protože se mohou pro různé soubory shodovat. Místo toho skript kontroluje MD5 hash, který je jedinečný pro každý soubor na základě jeho obsahu.
Vím, že ne každý chce ukládat jen nové přílohy, ale může si přát ukládat přílohy i z e-mailů, které již obdržel. Níže je uveden upravený skript, který se řídí stejnými pravidly, ale namísto toho ukládá přílohy ze všech e-mailů. Uložení všech příloh však může chvíli trvat, v závislosti na tom, kolik jich máte.
function saveAllAttachmentsToDrive() {
var folderName = "Přílohy e-mailů";
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);
}
}
}
}
}
Získání denní inspirativní citace
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="Denní citát";
var message = `Zde je váš denní citát:\n\n"${quote}"\n\n- ${author}`;
GmailApp.sendEmail(recipient, subject, message);
}
Možná to nemá přímé využití ve vaší práci nebo při správě e-mailů, ale je skvělé se inspirovat tím, že máte každý den všechno přímo v doručené poště. Pokud je tento skript správně nastaven, použije rozhraní They Said So API k zaslání denní inspirativní nabídky e-mailem. Zde je postup nastavení:
Nejprve potřebujete osobní klíč API od They Said So. Na stránce They Said So API si můžete zaregistrovat bezplatný účet a získat klíč. Nabízí 5 bezplatných volání, což je více než dost na denní nabídku.
Jakmile máte klíč, nahraďte část `YOUR_API_KEY` skutečným klíčem, který jste získali od They Said So. Musíte také vyměnit [email protected] za vaši skutečnou e-mailovou adresu nebo adresu někoho jiného, pokud to chcete nastavit pro někoho jiného.
Nyní už jen stačí nastavit spouštěč, který se bude spouštět denně, protože dřívější spuštění by pouze znovu odesílalo citát aktuálního dne.
Závěrem
Osobně jsem neměl problém spustit všechny tyto skripty dohromady a ani jsem nedosáhl denní kvóty. Jsem si jistý, že i vy budete v pořádku, pokud nebudete používat příliš agresivní spouštěče. Měli byste tyto skripty také kontrolovat, abyste se ujistili, že žádný skript nemá chyby.