vad behöver du skicka ett mail med Python? Några grundläggande programmering och webbkunskaper tillsammans med de elementära Python färdigheter. Vi antar att du redan har haft en webbapp byggd med det här språket och nu måste du utöka sin funktionalitet med meddelanden eller andra e-postmeddelanden som skickas. Denna handledning guidar dig genom de viktigaste stegen för att skicka e-post via en SMTP-server:

  1. konfigurera en server för testning (vet du varför det är viktigt?,lokal SMTP-server
  2. Mailtrap fake SMTP-server
  3. olika typer av e-post: HTML, med bilder och bilagor
  4. skicka flera personliga e-postmeddelanden (Python är bara ovärderlig för e-postautomatisering)
  5. några populära e-postsändningsalternativ som Gmail och transaktionella e-posttjänster

serveras med många kodexempel!

Obs: skriven och testad på Python 3.7.2.

skicka ett e-postmeddelande med SMTP

den första goda nyheten om Python är att den har en inbyggd modul för att skicka e-post via SMTP i sitt standardbibliotek., Inga extra installationer eller tricks krävs. Du kan importera modulen med följande uttalande:

import smtplib

för att se till att modulen har importerats korrekt och få den fullständiga beskrivningen av dess klasser och argument, skriv in en interaktiv Python-session:

help(smtplib)

vid nästa steg kommer vi att prata lite om servrar: välja rätt alternativ och konfigurera det.,

SMTP-server för att testa e-postmeddelanden i Python

När du skapar en ny app eller lägger till någon funktionalitet, särskilt när du gör det för första gången, är det viktigt att experimentera på en testserver. Här är en kort lista med anledningar:

  1. Du kommer inte att träffa dina vänners och kunders inkorgar. Detta är viktigt när du testar bulk e-post Skicka eller arbeta med en e-databas.
  2. Du kommer inte att översvämma din egen inkorg med att testa e-postmeddelanden.
  3. din domän kommer inte att svartlistas för skräppost.,

lokal SMTP-server

om du föredrar att arbeta i den lokala miljön kan den lokala SMTP-felsökningsservern vara ett alternativ. För detta ändamål erbjuder Python en smtpd-modul. Den har en DebuggingServer funktion, som kommer att kasta meddelanden du skickar ut och kommer att skriva ut dem till stdout. Den är kompatibel med alla operationssystem.,

Ställ in din SMTP-server på localhost: 1025

python -m smtpd -n -c DebuggingServer localhost:1025

för att kunna köra SMTP-server på port 25 behöver du root-behörigheter:

sudo python -m smtpd -n -c DebuggingServer localhost:25

det hjälper dig att verifiera om din kod fungerar och påpeka eventuella problem om det finns några. Det ger dig dock inte möjlighet att kontrollera hur din HTML-e-postmall återges.,

Fake SMTP-server

Fake SMTP-server imiterar arbetet med en riktig 3: e parts webbserver. I ytterligare exempel i det här inlägget kommer vi att använda Mailtrap. Utöver att testa e-postsändning, kommer det att låta oss kontrollera hur e-postmeddelandet kommer att återges och visas, granska meddelandet raw data samt kommer att ge oss en spam rapport., Mailtrap är mycket lätt att ställa in: du behöver bara kopiera referenser som genereras av appen och klistra in dem i din kod.

Så här ser det ut i praktiken:

Mailtrap gör det ännu enklare. Gå till Integrationsdelen på fliken SMTP-inställningar och få den färdiga mallen för det enkla meddelandet, med dina Mailtrap-referenser i den., Det är det mest grundläggande alternativet att instruera ditt Python-skript på vem som skickar vad till vem är sendmail () – instansmetoden:

prova Mailtrap gratis

koden ser ganska enkel ut, eller hur? Låt oss ta en närmare titt på det och lägga till några felhantering (se #förklaringar däremellan). För att fånga fel använder vi” försök ”och” utom ” block. Se dokumentationen för listan över undantag här.,

När du får det skickade resultatet i Shell bör du se ditt meddelande i din Mailtrap-inkorg:

skicka HTML-e-post

i de flesta fall måste du lägga till lite formatering, länkar eller bilder till din e-post meddelanden. Vi kan helt enkelt sätta alla dessa med HTML-innehållet. För detta ändamål har Python ett e-postpaket.

Vi kommer att hantera MIME-meddelandetypen, som kan kombinera HTML och vanlig text. I Python hanteras den av e-postmeddelandet.mime-modulen.,

det är bättre att skriva en textversion och en HTML-version separat och sedan slå samman dem med mimemultipart-instansen(”alternativ”). Det innebär att ett sådant meddelande har två renderingsalternativ i enlighet därmed. Om en HTML inte kan renderas framgångsrikt av någon anledning, kommer en textversion fortfarande att vara tillgänglig.

Input:

Output:

skicka e-post med bilagor i Python

nästa steg i mastering skicka e-post med Python är att fästa filer., Bilagor är fortfarande MIME-objekten men vi måste koda dem med base64-modulen. Ett par viktiga punkter om bilagorna:

  1. Python kan du bifoga textfiler, bilder, ljudfiler, och även program. Du behöver bara använda lämplig e-klass som e-post.mim.ljud.MIMEAudio eller e-post.mim.bild.MIMEImage. För fullständig information, se det här avsnittet i Python-dokumentationen. Du kan också kontrollera exemplen från Python för en bättre förståelse.
  2. kom ihåg om filstorleken: skicka filer över 20MB är en dålig praxis.,

i transaktions e-postmeddelanden är PDF-filerna de vanligaste: vi får vanligtvis kvitton, biljetter, boardingkort, orderbekräftelser etc. Så låt oss granska hur du skickar ett boardingkort som en PDF-fil.

Input:

för att bifoga flera filer kan du ringa meddelandet.fäst () metod flera gånger.

så här skickar du ett e-postmeddelande med bilder

bilder, även om de är en del av meddelandekroppen, är också bilagor., Det finns tre typer av dem: Cid-bilagor (inbäddade som MIME-objekt), base64-bilder (inline-inbäddning) och länkade bilder. Vi har beskrivit deras egenheter, för-och nackdelar, och kompatibilitet med de flesta e-postklienter i det här inlägget.

låt oss hoppa till exempel.

för att lägga till en Cid-bilaga skapar vi ett MIME-multipart-meddelande med mimeimage-komponent:

utgång:

CID-bilden visas både som en del av HTML-meddelandet och som en bilaga., Meddelanden med denna bildtyp betraktas ofta som skräppost: kontrollera fliken Analytics i Mailtrap för att se skräppostfrekvensen och rekommendationerna om dess förbättring. Många e – postklienter-i synnerhet Gmail-visar inte CID-bilder i de flesta fall. Så låt oss granska hur man bäddar in en bas64-kodad bild.

Här kommer vi att använda base64-modulen och experimentera med samma bildfil:

utgång:

nu är bilden inbäddad i HTML-meddelandet och är inte tillgänglig som bifogad fil., Python har kodat vår jpg-bild, och om vi går till fliken HTML-källa ser vi den långa bilddatasträngen i img src.

hur man skickar flera e-postmeddelanden i Python

skicka flera e-postmeddelanden till olika mottagare och göra dem personliga är det speciella med e-post i Python.

om du vill lägga till flera fler mottagare kan du bara skriva in deras adresser åtskilda av ett kommatecken, lägga till CC och BCC. Men om du arbetar med en bulk e-post skicka, Python kommer att spara dig med loopar.

ett av alternativen är att skapa en databas i en .,csv-format (vi antar att det sparas i samma mapp som ditt Python-skript).

Vi ser ofta våra namn i Transaktions-eller till och med PR-exempel. Så här kan vi göra det med Python.

låt oss organisera listan i en enkel tabell med bara två kolumner: namn och e-postadress. Det ska se ut som följande exempel:

#name,emailJohn Johnson,[email protected] Peterson,[email protected]

koden nedan öppnar filen och slingrar över raderna rad för rad och ersätter {name} med värdet från kolumnen ”name”.,

Input:

Efter att ha kört skriptet får vi följande svar:

Sent to John JohnsonSent to Peter Peterson>>> 

utgång

i vår Mailtrap inkorg ser vi två meddelanden: en för John Johnson och en annan för Peter Peterson, levereras samtidigt:

skicka e-post med python via Gmail

När du är redo för att skicka e-post till riktiga mottagare kan du konfigurera din produktionsserver. Det beror också på dina behov, mål och preferenser: din localhost eller någon extern SMTP.,

ett av de mest populära alternativen är Gmail så låt oss ta en närmare titt på det.

Vi kan ofta se titlar som ”så här konfigurerar du ett Gmail-konto för utveckling”. Det betyder faktiskt att du kommer att skapa ett nytt Gmail-konto och kommer att använda det för ett visst ändamål.

för att kunna skicka e-post via ditt Gmail-konto måste du ge åtkomst till det för din ansökan. Du kan tillåta mindre säkra appar eller dra nytta av OAuth2-auktoriseringsprotokollet. Det är ett sätt svårare men rekommenderas på grund av säkerhetsskäl.,

För att använda en Gmail-server måste du veta:

  • servernamnet = smtp.gmail.com
  • port = 465 för SSL/TLS-anslutning (preferred)
  • eller port = 587 för STARTTLS-anslutning.
  • användarnamn = din Gmail-e-postadress
  • lösenord = ditt lösenord.

om du tenderar att enkelhet, då kan du använda Yagmail, den dedikerade Gmail/SMTP. Det gör e-post skicka riktigt lätt., Jämför bara ovanstående exempel med dessa flera rader kod:

transaktionella e-posttjänster

Gmail är gratis och används i stor utsträckning men det har fortfarande begränsningar för e-postsändning. Om dina behov går långt utöver Gmail-reglerna, välj bland ett av alternativen för transaktionstjänster, eller som de också kallas, E-API-tjänster.

Python stöds av de allra flesta av de betrodda API: erna för e-post så att du kan välja enligt dina önskemål och budget.,

Här är några guider för att skicka e-post med Python genom listan över de mest populära tjänsterna:

  • Amazon SES
  • Mailgun
  • Mandrill
  • Postmark
  • Sendgrid
  • SocketLabs

nästa steg med e-post i Python

Vi har visat bara grundläggande alternativ för att skicka e-post med Python, för att beskriv logiken och en rad av dess möjligheter. För att få bra resultat rekommenderar vi att du granskar Python-dokumentationen och bara experimenterar med din egen kod!,

det finns en massa olika Python ramar och bibliotek, vilket gör att skapa appar mer elegant och dedikerad. I synnerhet kan några av dem bidra till att förbättra din upplevelse med att bygga e-post skicka funktionalitet:

de mest populära ramverk är:

  1. kolv, som erbjuder ett enkelt gränssnitt för e— post skicka-kolv Mail.
  2. Django, vilket kan vara ett bra alternativ för att bygga HTML-mallar. (Och här är vår handledning om att skicka e-post med Django).
  3. Zope är praktiskt för webbplatsutveckling.,
  4. Marrow Mailer är en dedikerad postleverans ram lägga till olika användbara konfigurationer.
  5. Plotly och dess streck kan hjälpa till med sändningsdiagram och rapporter.