6 Google Apps Script-projekt för att förstärka din Gmail-upplevelse

Återigen är jag här för att prata om produktivitet och automatisering i Gmail. Den här gången går vi i fullt nördläge och kommer att använda Google Apps Script för att förbättra din Gmail-upplevelse.

Gmail har många inbyggda inställningar som du kan justera för att automatisera uppgifter och öka produktiviteten. Det har dock sina begränsningar och många funktioner erbjuder inte tillräckligt med anpassningsalternativ. Det är här du kan ta saken i egna händer med Google Apps Script.

Med den kan du skapa anpassade skript som kan utföra uppgifter som Gmail inte kan. Inte bara det, du kan ställa in tidsbaserade triggers för att automatisera dessa skript.

För att komma igång listar jag några användbara skript som säkert kommer att förbättra din Gmail-upplevelse. Jag har sett till att varje skript automatiskt löser vanliga problem, som dubbletter eller automatiskt skapande av en ny mapp. Därför kan vissa skript verka lite längre än deras avsedda syfte.

Skapa ett skript i Google Apps Script

Innan du börjar använda och anpassa dessa skript måste du veta hur du skapar ett skript i Google Apps Script och kör det. Här är hur:

Öppna Google Apps Script och klicka på knappen Nytt projekt i den vänstra panelen.

Här måste du ta bort all kod som redan skrivits och kopiera/klistra in skriptet som jag kommer att tillhandahålla. Klicka sedan på knappen Spara för att spara skriptet.

För att köra skriptet, klicka på Kör-knappen bredvid Spara. Du kommer att bli ombedd att ge behörigheter och det kommer att finnas en varning om att skriptet inte är verifierat. Du kan ignorera varningen och ge tillstånd eftersom skriptet är för personligt bruk och Google inte har granskat det.

Det är det, skriptet kommer att köras och det kommer att visa i exekveringsloggen om det har körts framgångsrikt eller inte.

Ställ in en utlösare

Många av dessa skript fungerar bäst när de utlöses automatiskt. Tack och lov har Google Apps Script också ett avsnitt för att skapa tidsbaserade utlösare för varje skript så att de körs automatiskt.

Men innan jag berättar om att skapa en trigger bör du veta det Google Apps Script har begränsade kvoter baserat på om du prenumererar på Google Workspace-plan eller inte. Om du har för många skript som körs åt gången och för ofta, kan du nå den dagliga kvoten som kommer att stoppa tjänsten för tiden.

Även om du har möjlighet att köra skript varje minut, skulle det vara en enorm belastning på din dagliga kvot. Se till att du bara ställer in en timer som gör jobbet på ett tillförlitligt sätt.

För att skapa en trigger klickar du på Triggers i den vänstra panelen medan skriptet är öppet och klickar sedan på knappen Add Trigger.

Här kan du välja en timer i minuter till upp till månader och intervall. Du kan också välja ett fast datum och tid för att köra skriptet endast en gång vid den specifika tidpunkten. När alla är markerade klickar du på Spara för att skapa utlösaren.

Om du inte har gett tillåtelse att köra skriptet som jag sa till dig tidigare, kommer du att bli ombedd att ge tillstånd innan du skapar utlösaren.

Baserat på ditt val kommer triggern att köras kontinuerligt. Om det uppstår något problem kommer det att meddela dig tillsammans med felet som uppstod.

Låt oss nu dyka ner i några praktiska exempel på hur du kan använda Google Apps Script för att automatisera dina Gmail-uppgifter.

Skicka återkommande e-postmeddelanden

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

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

Gmail låter dig schemalägga e-postmeddelanden, men inte återkommande e-postmeddelanden. Oavsett om du vill påminna någon om något eller om du vill se till att din e-post inte förbises. Detta enkla skript skickar ett e-postmeddelande till den angivna adressen med ämnet och meddelandet du anger. Du kan sedan ställa in en återkommande trigger från alternativet Triggers.

I skriptet redigerar du avsnittet för mottagare, ämne och meddelande med de faktiska detaljerna. Se till att citattecken runt exempeltexten stannar. Till exempel bör ämnet se ut så här:

var subject = "Important Reminder";

Eftersom triggarna har en maxgräns på upp till en månad måste det återkommande meddelandet skickas en gång i månaden. Tyvärr betyder det att du inte kan använda den för att skicka önskemål för tillfällen som inträffar på årsbasis.

Filtrera e-postmeddelanden med länkar till en etikett

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-postmeddelanden med länkar i kroppen är oftast viktigare. Oavsett om du får rapporter från en kollega eller om du har prenumererat på nyhetsbrev som skickar specifika resurser kan det vara mycket användbart att kategorisera e-postmeddelanden med länkar.

Det här skriptet tittar på alla olästa e-postmeddelanden i ditt Gmail-konto och separerar de med länkar i e-posttexten till en ny etikett som heter ”E-postmeddelanden med länkar”. Som standard letar den efter e-post överallt i Gmail, men du kan begränsa sökningen genom att redigera var-trådarna = GmailApp.search(’is:unread’); linje. Nedan är några sätt du kan redigera den:

Sök endast i Inkorgen: var threads = GmailApp.search(’in:inbox is:oread’);

Sök i andra etiketter: var threads = GmailApp.search(’in:inbox is:oread OR in:promotions is:oread OR in:important is:oread’);

Sök i alla lästa/olästa e-postmeddelanden i Inbox: var threads = GmailApp.search(’in:inbox’);

Sök e-postmeddelanden från en specifik avsändare: var threads = GmailApp.search(’from:[email protected]’);

Dessa exempel bör ge dig en uppfattning om hur du kan redigera skriptet för att begränsa e-postmeddelanden med länkar. Jag tror också att det kommer att vara mer än tillräckligt att ställa in en daglig trigger för sådana typer av e-postmeddelanden.

Ta bort gamla e-postmeddelanden automatiskt

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

Om du inte vill behålla gamla e-postmeddelanden kan du använda det här skriptet för att ta bort e-postmeddelanden som är äldre än en viss period. Skriptet här kommer att leta efter alla e-postmeddelanden i Gmail som är äldre än 30 dagar och skicka dem till papperskorgen. Du kan redigera delen ’older_than:30d’ för att ange hur gamla e-postmeddelanden du vill radera, som ’older_than:180d’.

Om du istället vill ta bort e-postmeddelanden från en specifik etikett kan du redigera Gmail.App.search-delen för att inkludera etiketten. Så här:

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

För att göra processen automatisk, skapa en trigger som automatiskt kör skriptet med några dagars mellanrum. Beroende på hur gamla e-postmeddelanden du vill radera, är jag säker på att en veckoutlösare eller till och med en månadsvis kommer att vara bra.

Spara alla e-postadresser till Google Sheets

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

Det här skriptet kommer att söka i Gmail efter alla e-postmeddelanden och kopiera avsändarens/mottagarnas namn och e-postadress och spara dem i Google Sheets. Det kan finnas många användningsområden för detta, som att skapa en e-postlista för e-postmarknadsföring eller skapa ett register över alla som kontaktar dig.

Men att skapa det här skriptet skiljer sig lite från andra eftersom du måste öppna Google Apps Script inifrån Google Sheets så att det kan identifiera arket. Det behövs dock bara göras för första gången. Här är hur:

Öppna ett nytt ark Google Kalkylark. Klicka här på Extensions i menyn ovan och välj sedan Apps Script. Detta öppnar Google Apps Script och du kan lägga till skriptet och köra det som jag visade tidigare.

Skriptet kommer att skapa ett nytt ark med namnet ”E-postadresser” med namn och e-postadress skrivna i samma cell. Du behöver inte öppna arket igen i framtiden för varje utlösare. Alla nya e-postadresser kommer att uppdateras i arket i slutet utan några dubbletter.

Beroende på hur ofta du får mejl från nya avsändare bör en daglig eller veckovis trigger vara bra.

Spara e-postbilagor till Google Drive automatiskt

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

Ett mycket praktiskt skript om du ofta får viktiga bilagor via e-post. Detta kommer inte bara att bevara bilagor utan också gruppera dem i ett mycket bättre gränssnitt för att hantera dem.

Detta skript är kodat för att endast fungera på nya e-postmeddelanden som du kommer att få efter den tid det kördes för första gången. Den kommer automatiskt att skapa en ny mapp med namnet ”E-postbilagor” i Google Drive om den inte är tillgänglig. Jag har också undvikit att använda namn för att kontrollera dubblettfiler eftersom de kan vara samma för olika filer. Skriptet söker istället efter ett MD5-hashvärde som är unikt baserat på filinnehåll.

Jag vet att inte alla bara vill spara nya bilagor och kanske vill ha bilagor från redan mottagna e-postmeddelanden också. För detta, nedan är ett modifierat skript som följer samma regler men sparar bilagor från aktuella e-postmeddelanden istället. Det kommer dock att ta ganska lång tid att spara allt beroende på hur många bilagor du har.

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

Få dagligt inspirerande citat

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

Det kanske inte har en direkt användning i ditt arbete eller e-posthantering, men det är bra för att få fart på att ge allt varje dag direkt i inkorgen. När det är korrekt konfigurerat kommer det här skriptet att använda They Said So API för att skicka ditt dagliga inspirerande citat via e-post. Så här ställer du in det:

Först behöver du en personlig API-nyckel från They Said So. På De sa så API sida kan du registrera ett gratis konto för att få nyckeln. Det ger 5 samtal gratis, vilket är mer än tillräckligt för en daglig offert.

När du har nyckeln byter du ut YOUR_API_KEY-delen mot den faktiska nyckeln du fick från They Said So. Du måste också byta ut [email protected] del med din faktiska e-postadress eller någon annans om du vill ställa in den för någon annan.

Nu behöver du bara ställa in en utlösare som körs på daglig basis, eftersom att köra den tidigare än så kommer bara att skicka om dagens offert.

Slutord

Jag personligen hade inga problem med att köra alla dessa skript tillsammans, och jag når inte heller den dagliga kvoten. Jag är säker på att du kommer att klara dig också, så länge du inte använder för aggressiva triggers. Du bör också hålla koll på dessa skript för att säkerställa att inget skript stöter på några fel.