Inboxtriage är en sak. Men att manuellt kopiera avsändardetaljer till en databas (eller ett ”masterkontaktark” som aldrig riktigt stämmer) är den typen av tidsödande pill som i det tysta förstör din dag.
Sales ops-team känner av det när leads faller mellan stolarna. Supportchefer känner av det när överlämningar blir röriga. Och om du driver ett litet team känner du av det eftersom det är du som sitter och copy-pastar. Den här automatiseringen för Gmail MySQL-loggning håller ett felfritt kontaktspår utan att vara beroende av någons minne.
Du sätter upp ett n8n-flöde som bevakar nya Gmail-meddelanden, extraherar avsändar-/mottagardetaljer och upsertar en post i MySQL så att dubbletter inte byggs på.
Så fungerar automatiseringen
Här är hela flödet som du kommer att sätta upp:
n8n Workflow Template: Gmail till MySQL, kontakter loggas utan manuell inmatning
flowchart LR
subgraph sg0["Receive Email Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Receive Email", pos: "b", h: 48 }
n1["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Get Client Name and Email"]
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/mysql.dark.svg' width='40' height='40' /></div><br/>Insert New Client in MySQL"]
n0 --> n1
n1 --> n2
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n0 trigger
class n2 database
class n1 code
classDef customIcon fill:none,stroke:none
class n1,n2 customIcon
Varför det här är viktigt: din ”kontaktkälla att lita på” fortsätter att driva iväg
Om e-post är där leads, partnerförfrågningar och supportärenden börjar, så är Gmail i praktiken din ytterdörr. Problemet är vad som händer efter att mejlet har kommit in. Någon måste logga avsändaren, bekräfta e-postadressen, koppla den till en befintlig post och hålla den uppdaterad. Det låter enkelt tills du gör det dussintals gånger om dagen över flera kollegor. En missad uppdatering skapar dubbletter. Dubbletter skapar felaktig routing. Sedan svarar någon i fel tråd, eller så tappar ni kontext precis när kunden redan är irriterad. Det är döden av små steg.
Det går snabbt att tappa kontrollen. Här är var det brukar fallera i riktiga team.
- Nya kontakter ligger i inkorgar i timmar eftersom loggningen ”kan vänta”, och sedan blir det aldrig av.
- Två personer loggar samma avsändare under lite olika namn, så databasen blir en dubblettfabrik.
- Överlämningar blir slarviga eftersom det inte finns någon konsekvent historik över vem som mejlade vem och vad ämnesraden var.
- Rapportering blir gissningslek eftersom din tabell ”contacts” inte uppdateras när en befintlig avsändare mejlar igen.
Det du bygger: auto-logga Gmail-avsändare till MySQL (utan dubbletter)
Det här flödet kör tyst i bakgrunden och gör varje nytt Gmail-mejl till en korrekt formaterad databaspost. Det börjar med en Gmail-trigger som letar efter nya meddelanden ungefär en gång per minut. När ett mejl kommer in plockar ett litet kodsteg ut fälten du faktiskt bryr dig om för kontaktspårning: message- och thread-ID:n, en snippet för snabb kontext, avsändar- och mottagarnamn/e-post, plus ämnesraden när den finns. Sedan skriver n8n in datat i MySQL med ett upsert-mönster. Om avsändarens e-post redan finns uppdateras den befintliga raden i stället för att skapa ännu en dubblett. Resultatet är ett sökbart, alltid aktuellt kontaktspår som teamet kan fråga mot, koppla till tickets eller mata in i rapportering.
Flödet startar när Gmail ser ett nytt mejl. Därefter normaliseras mejlet till konsekventa fält (namn, e-post, ID:n). Slutligen lagrar MySQL det i en tabell och uppdaterar befintliga avsändare så att datat håller sig prydligt.
Det du bygger
| Vad som automatiseras | Vad du uppnår |
|---|---|
|
|
Förväntade resultat
Säg att du får cirka 40 viktiga mejl per dag (leads, fakturering, support). Om det tar ungefär 2 minuter att logga varje avsändare (kopiera namn/e-post, klistra in, kontrollera dubbletter, spara) blir det cirka 80 minuter per dag. Med det här flödet är ”mänsklig tid” i princip noll efter uppsättning, eftersom Gmail triggar flödet och MySQL uppdaterar automatiskt inom ungefär en minut. Du får tillbaka över en timme de flesta dagar, och databasen förblir konsekvent även när inkorgen är kaos.
Innan du börjar
- n8n-instans (prova n8n Cloud gratis)
- Self-hosting-alternativ om du föredrar det (Hostinger fungerar bra)
- Gmail för att upptäcka och läsa inkommande mejl.
- MySQL för att lagra och uppdatera din kontaktlogg.
- Databastabell (skapa den i MySQL med obligatoriska kolumner)
Svårighetsgrad: Nybörjare. Du kopplar Gmail-/MySQL-inloggningar och mappar fält mot rätt databaskolumner.
Vill du att någon bygger detta åt dig? Prata med en automationsexpert (gratis 15-minuters konsultation).
Steg för steg
Ett nytt mejl landar i din Gmail-inkorg. Flödets Gmail-trigger bevakar nya meddelanden och kollar ungefär en gång per minut, så att poster hålls uppdaterade utan att du behöver göra något.
Meddelandet städas upp till ”databasklara” fält. Ett kodsteg extraherar avsändar- och mottagarnamn/e-post, plus messageId, threadId, snippet och subject (när det finns). Här säkerställer du konsekvens, så att ”John Smith <[email protected]>” blir förutsägbara värden.
MySQL lagrar kontakten utan att skapa dubbletter. MySQL-noden infogar raden första gången en avsändare dyker upp och uppdaterar den vid framtida mejl när sender_email matchar en befintlig post.
Ditt kontaktspår blir sökbart. Därifrån kan du bygga vyer, dashboards eller koppla det till tickets. Vissa team speglar också samma dataset till kalkylark för icke-tekniska användare.
Du kan enkelt ändra vad du lagrar (som etiketter eller tidsstämplar) för att matcha hur teamet kvalificerar leads eller routar support. Se den fullständiga implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: konfigurera Gmail-triggern
Konfigurera triggern så att arbetsflödet startar varje gång ett nytt mejl kommer in i Gmail.
- Lägg till noden Incoming Email Trigger på er arbetsyta.
- Öppna Incoming Email Trigger och ställ in Poll Times på
everyMinute. - Inloggningsuppgifter krävs: Anslut era gmailOAuth2-inloggningsuppgifter.
Steg 2: anslut MySQL
Förbered databasanslutningen som används för att lagra avsändar- och mottagardetaljer.
- Lägg till noden Upsert Contact Record på er arbetsyta.
- Inloggningsuppgifter krävs: Anslut era mySql-inloggningsuppgifter.
- Ställ in Table på
contacts.
Steg 3: konfigurera databearbetning med kod
Tolka mejlhuvudena så att avsändar- och mottagardetaljer extraheras till rena fält.
- Lägg till noden Extract Sender Details efter Incoming Email Trigger.
- Ställ in Mode på
runOnceForEachItem. - Klistra in JavaScript i JavaScript Code exakt som den anges i arbetsflödet:
// Extract Sender Info let sender_email = $json.From.trim(); let sender_name = null; if (sender_email.includes('<')) { sender_name = sender_email.split('<')[0].trim(); sender_email = sender_email.split('<')[1].replace('>', '').trim(); } // Extract Recipient Info let recipient_email = $json.To.trim(); let recipient_name = null; if (recipient_email.includes('<')) { recipient_name = recipient_email.split('<')[0].trim(); recipient_email = recipient_email.split('<')[1].replace('>', '').trim(); } return { "sender_name": sender_name, "sender_email": sender_email, "recipient_name": recipient_name, "recipient_email": recipient_email }
Steg 4: konfigurera upsert-åtgärden
Mappa de extraherade värdena till er databas och gör upsert på meddelande-ID för att undvika dubbletter.
- Öppna Upsert Contact Record och ställ in Operation på
upsert. - Ställ in Column To Match On på
messageId. - Ställ in Value To Match On på
{{ $('Incoming Email Trigger').item.json.id }}. - I Values To Send lägger ni till dessa mappningar:
- threadId →
{{ $('Incoming Email Trigger').item.json.threadId }} - sender_name →
{{ $json.sender_name }} - sender_email →
{{ $json.sender_email }} - recipient_name →
{{ $json.recipient_name }} - recipient_email →
{{ $json.recipient_email }} - subject →
{{ $('Incoming Email Trigger').item.json.Subject }} - snippet →
{{ $('Incoming Email Trigger').item.json.snippet }}
- threadId →
contacts har kolumner som exakt matchar kolumnnamnen som används i Upsert Contact Record för att förhindra insert-fel.Steg 5: testa och aktivera ert arbetsflöde
Kör ett manuellt test för att bekräfta att data flödar från Gmail till er databas innan ni slår på det.
- Klicka på Execute Workflow och skicka ett testmejl till ert anslutna Gmail-konto.
- Verifiera att Extract Sender Details returnerar
sender_name,sender_email,recipient_nameochrecipient_email. - Bekräfta att en ny rad skapas eller uppdateras i tabellen
contactsav Upsert Contact Record. - Växla arbetsflödet till Active för att aktivera kontinuerlig övervakning.
Felsökningstips
- Gmail-inloggningar kan löpa ut eller tappa åtkomst om dina Google-säkerhetsinställningar ändras. Om det slutar trigga, kontrollera Gmail-credentials i n8n och autentisera om först.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om nedströmsnoder fallerar på tomma svar.
- MySQL-insertar misslyckas oftast för att tabellschemat inte matchar flödesfälten. Bekräfta att dina kolumner finns (messageId, threadId, snippet, sender_name, sender_email, recipient_name, recipient_email, subject) och att fält som kan vara tomma faktiskt tillåter NULL.
Snabba svar
Cirka 30 minuter om din Gmail och MySQL är redo.
Nej. Du kopplar mest konton och mappar fält, och det inkluderade kodsteget är redan uppsatt åt dig.
Ja. n8n har ett gratis self-hosted-alternativ och en gratis provperiod på n8n Cloud. Cloud-planer börjar på 20 USD/månad för högre volym. Du behöver också räkna in din kostnad för MySQL-hosting (ofta redan täckt) eftersom det här flödet inte kräver betalda AI-API:er.
Två alternativ: n8n Cloud (hanterat, enklast uppsättning) eller self-hosting på en VPS. För self-hosting är Hostinger VPS prisvärd och hanterar n8n bra. Self-hosting ger obegränsade körningar men kräver grundläggande serveradministration.
Ja, och det borde du sannolikt göra. Du kan bygga ut kodsteget ”Extrahera avsändardetaljer” med tidsstämplar, Gmail-etiketter eller metadata för bilagor och sedan lägga till motsvarande kolumner i MySQL. Vissa team lagrar också supportkategori som de härleder från ämnesraden, eller taggar ”lead vs. kund” baserat på mottagaradressen. Om du någon gång byter databas ersätter du främst MySQL-steget ”Upsert Contact Record” med motsvarande för ditt system.
Vanligtvis beror det på att Googles auktorisering har löpt ut eller dragits tillbaka. Koppla om Gmail-credentials i n8n och bekräfta sedan att triggern bevakar rätt inkorg och har behörighet att läsa nya mejl.
För de flesta små team hanterar det daglig mejlvolym utan problem eftersom det bara är en databasskrivning per meddelande. På n8n Cloud är den praktiska gränsen din plans månatliga körningar. Om du self-hostar finns ingen plattformsgräns för körningar, men din server och MySQL-prestanda blir flaskhalsen. Om du börjar processa enorma inkorgar eller flera postlådor, överväg att filtrera vilka etiketter/mappar som triggar flödet så att du bara loggar meddelandena som är viktiga.
Ofta, ja, eftersom avdubblettning och upsert till en databas är där ”enkla zaps” blir krångliga. n8n gör det enklare att kontrollera matchningslogiken (som att använda sender_email) och att justera datat innan det skrivs. Zapier eller Make kan fortfarande fungera om du bara loggar några få fält och inte bryr dig särskilt om dubbletter. Om du är osäker, prata med en automationsexpert så hjälper vi dig att välja den mest robusta lösningen.
När detta väl kör är inkorgen inte längre ett arkivskåp. Ditt MySQL-kontaktspår håller sig aktuellt, och teamet kan fokusera på att svara, inte att skriva om.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.