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

By rik

Effektivisera Gmail med Google Apps Script

Återigen diskuterar vi hur du kan öka din produktivitet och automatisera uppgifter i Gmail. Den här gången dyker vi djupare och använder Google Apps Script för att ge din Gmail-upplevelse ett lyft.

Gmail har många inbyggda inställningar som kan anpassas för att automatisera rutiner och öka effektiviteten. Dessa har dock sina begränsningar och erbjuder inte alltid tillräckligt med anpassningsmöjligheter. Det är här Google Apps Script kommer in i bilden och ger dig möjlighet att ta saken i egna händer.

Med hjälp av Google Apps Script kan du skapa personliga skript som utför unika uppgifter som Gmail annars inte klarar av. Du kan dessutom schemalägga dessa skript att köras automatiskt med hjälp av tidsbaserade triggers.

För att komma igång kommer jag att presentera några användbara skript som med säkerhet kommer att förbättra din Gmail-hantering. Varje skript löser automatiskt vanliga problem som dubbletter eller att automatiskt skapa nya mappar. Vissa skript kan därför verka lite längre än vad deras syfte är.

Skapa och köra ett skript i Google Apps Script

Innan du börjar använda och anpassa skripten behöver du veta hur du skapar och kör ett skript i Google Apps Script. Så här gör du:

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

Radera all befintlig kod och klistra in skriptet som jag kommer att tillhandahålla. Klicka sedan på ”Spara” för att spara skriptet.

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

Skriptet kommer nu att köras och visa i loggen om det har lyckats eller inte.

Schemalägg en automatisk utlösare

Många av dessa skript fungerar bäst när de körs automatiskt. Som tur är har Google Apps Script även stöd för att skapa tidsbaserade utlösare som kan schemalägga skripten.

Men innan vi går in på hur du skapar en utlösare, är det bra att veta att Google Apps Script har en begränsning beroende på om du prenumererar på Google Workspace eller inte. Om du har för många skript som körs för ofta kan du nå den dagliga kvoten och tjänsten kommer då att stoppas tillfälligt.

Även om det går att ställa in skript att köras varje minut skulle det innebära en stor belastning på din dagliga kvot. Se till att du ställer in en tid som utför jobbet på ett pålitligt sätt.

För att skapa en utlösare, tryck på ”Utlösare” i vänster panel när skriptet är öppet, och klicka sedan på ”Lägg till utlösare”.

Här kan du välja ett tidsintervall från minuter till månader. Du kan också välja ett specifikt datum och tid om du bara vill köra skriptet en gång. När du är klar, klickar du på ”Spara” för att skapa utlösaren.

Om du inte har gett tillåtelse att köra skriptet tidigare kommer du att bli ombedd att göra det innan utlösaren skapas.

Utlösaren kommer nu att köras kontinuerligt baserat på dina val. Om det uppstår några problem får du ett meddelande med en beskrivning av felet.

Nu kommer vi till 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 = "Ditt ämne här";
  var message = "Ditt anpassade meddelande här";

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

Gmail låter dig schemalägga e-postmeddelanden, men inte återkommande. Om du behöver påminna någon om något eller försäkra dig om att din e-post inte missas kan detta skript hjälpa dig. Det här enkla skriptet skickar ett e-postmeddelande till den angivna adressen med det ämne och meddelande du anger. Du kan sedan ställa in en återkommande utlösare från alternativen.

I skriptet redigerar du avsnitten för mottagare, ämne och meddelande med dina faktiska detaljer. Se till att citattecknen runt texten finns kvar. Till exempel ska ämnet se ut så här:

var subject = "Viktig påminnelse";

Eftersom utlösare har en maxgräns på upp till en månad måste återkommande meddelanden skickas månadsvis. Det innebär tyvärr att du inte kan använda den för att skicka meddelanden för tillfällen som sker en gång per år.

Filtrera e-postmeddelanden med länkar till en etikett

function processUnreadEmailsWithLinks() {
  var labelName="E-postmeddelanden med länkar";
  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 texten är ofta viktigare. Oavsett om du får rapporter från en kollega eller prenumererar på nyhetsbrev med viktiga resurser, kan det vara bra att kategorisera e-postmeddelanden med länkar.

Detta skript söker igenom alla olästa e-postmeddelanden och separerar de med länkar i texten till en ny etikett som heter ”E-postmeddelanden med länkar”. Som standard letar den överallt i Gmail men du kan begränsa sökningen genom att redigera ”var threads = GmailApp.search(’is:unread’);”. Nedan följer 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 Inkorgen: 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 ger dig en idé om hur du kan redigera skriptet för att begränsa e-postmeddelanden med länkar. En daglig utlösare borde vara tillräckligt för denna typ av e-postmeddelande.

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 tid. Skriptet kommer att leta efter alla e-postmeddelanden 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, till exempel ’older_than:180d’.

Om du istället vill ta bort e-postmeddelanden från en specifik etikett kan du redigera Gmail.App.search-delen, till exempel så här:

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

För att göra processen automatisk, skapa en utlösare som kör skriptet automatiskt med några dagars mellanrum. Beroende på hur gamla e-postmeddelanden du vill ta bort, kan en veckoutlösare eller till och med en månadsvis vara bra.

Spara alla e-postadresser till Google Sheets

function getEmailAddresses() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetName = "E-postadresser";
  var sheet = ss.getSheetByName(sheetName);
  
  if (!sheet) {
    sheet = ss.insertSheet(sheetName);
    sheet.appendRow(["E-postadress"]);
  }
  
  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 söker igenom Gmail efter alla e-postmeddelanden och kopierar avsändarnas/mottagarnas namn och e-postadress och sparar dem i Google Sheets. Det finns många potentiella användningsområden, som att skapa en e-postlista för e-postmarknadsföring eller en lista över alla som har kontaktat dig.

Att skapa detta skript skiljer sig lite från de andra, eftersom du behöver öppna Google Apps Script inifrån Google Sheets så att det kan identifiera arket. Det behöver dock bara göras första gången. Så här gör du:

Öppna ett nytt Google Kalkylark. Klicka på ”Tillägg” i menyn ovan och välj sedan ”Apps Script”. Detta öppnar Google Apps Script, där du kan lägga till och köra skriptet.

Skriptet skapar ett nytt ark med namnet ”E-postadresser” med namn och e-postadress 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, utan dubbletter.

Beroende på hur ofta du får e-post från nya avsändare, bör en daglig eller veckovis utlösare vara lämplig.

Spara e-postbilagor till Google Drive automatiskt

function onNewEmail(e) {
  var threads = GmailApp.getInboxThreads(0, 1);
  var messages = threads[0].getMessages();
  
  var folderName = "E-postbilagor";
  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. Det bevarar inte bara bilagor, utan grupperar dem i ett bra gränssnitt för att hantera dem.

Detta skript är programmerat att endast fungera på nya e-postmeddelanden som du får efter att det har körts för första gången. Det skapar automatiskt en ny mapp med namnet ”E-postbilagor” i Google Drive om den inte redan finns. Jag har undvikit att använda namn för att kontrollera efter dubblettfiler, eftersom de kan vara identiska för olika filer. Istället söker skriptet efter ett MD5-hashvärde, som är unikt baserat på filinnehållet.

Jag vet att alla inte bara vill spara nya bilagor, utan även från e-postmeddelanden som du redan har fått. Nedan finns ett modifierat skript som följer samma regler, men sparar bilagor från befintliga e-postmeddelanden istället. Det kan dock ta ganska lång tid att spara alla bilagor beroende på hur många du har.

function saveAllAttachmentsToDrive() {
  var folderName = "E-postbilagor";
  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å ett dagligt inspirerande citat

function sendDailyQuoteEmail() {
  var apiKey = 'DIN_API_NYCKEL';
  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="Dagens Citat";
  var message = `Här är ditt dagliga citat:\n\n"${quote}"\n\n- ${author}`;

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

Det kanske inte har direkt användning i ditt arbete eller e-posthantering, men det kan ge lite extra inspiration. När detta skript är korrekt konfigurerat kommer det att använda ”They Said So API” för att skicka dig ett inspirerande citat varje dag. Så här konfigurerar du det:

Först behöver du en personlig API-nyckel från ”They Said So”. På They Said So API kan du registrera ett gratis konto för att få nyckeln. Det ger 5 gratis API-anrop, vilket är mer än tillräckligt för ett dagligt citat.

När du har fått din API-nyckel ersätter du ”DIN_API_NYCKEL”-delen med den nyckel du fick. Du behöver även ersätta [email protected] med din egen e-postadress eller någon annans om du vill ställa in det för en annan person.

Nu behöver du bara ställa in en utlösare som körs dagligen, annars kommer den bara att skicka dagens citat igen.

Sammanfattning

Jag har personligen inte haft några problem med att köra alla dessa skript samtidigt, och jag har inte nått den dagliga kvoten. Jag är säker på att du också kommer att klara dig, så länge du inte använder alltför aggressiva utlösare. Du bör också regelbundet kontrollera dessa skript för att säkerställa att inga fel uppstår.