Hva trenger du å sende en e-post med Python? Noen grunnleggende programmering og web kunnskap sammen med de elementære Python ferdigheter. Vi antar at du har allerede vært en web-app bygget med dette språket, og nå må du utvide funksjonaliteten med varsler eller andre e-poster du sender. Denne opplæringen vil lede deg gjennom de grunnleggende trinnene for å sende e-post via en SMTP-server:
- Konfigurere en server for testing (vet du hvorfor det er viktig?,)
- Lokal SMTP-server
- Mailtrap falske SMTP-server
- Forskjellige typer e-post: HTML, med bilder og vedlegg
- Sender flere personlige e-post (Python er bare uvurderlig for e-automasjon)
- Noen populære e-post sending alternativer som for eksempel Gmail og e-post tjenester
Serveres med en rekke kode eksempler!
Merk: skrevet og testet på Python 3.7.2.
Sender en e-post med SMTP
Den første gode nyheten om Python er at det har en innebygd modul for å sende e-post via SMTP-i sin standard bibliotek., Ingen ekstra installasjoner eller triks som er nødvendig. Du kan importere modulen ved å bruke følgende uttalelse:
import smtplib
for Å sørge for at modulen har blitt importert på riktig måte og få full beskrivelse av sine klasser og argumenter, skriver i en interaktiv Python session:
help(smtplib)
På vår neste trinn, vil vi snakke litt om servere: velge riktig alternativ, og konfigurere den.,
SMTP-server for testing av e-post i Python
Når du oppretter en ny app eller legge til funksjonalitet, spesielt når du gjør det for første gang, er det viktig å eksperimentere på en test-server. Her er en kort liste over grunner:
- Du vil ikke treffe venner og kunder’ innbokser. Dette er viktig når du teste bulk sending av e-post eller arbeide med en e-database.
- Du vil ikke flom din egen innboks med testing av e-post.
- domenet Ditt vil ikke bli svartelistet for spam.,
Lokal SMTP-server
Hvis du foretrekker å arbeide i det lokale miljø, lokal SMTP debugging server kan være et alternativ. For dette formål, Python, og tilbyr en smtpd modul. Det har en DebuggingServer funksjonen, som vil forkaste meldinger du sender ut og vil skrive dem ut til stdout. Den er kompatibel med alle operasjoner systemer.,
Angi SMTP-server for å localhost:1025
python -m smtpd -n -c DebuggingServer localhost:1025
for å kjøre SMTP-serveren på port 25, vil du trenger root-rettigheter:
sudo python -m smtpd -n -c DebuggingServer localhost:25
Det vil hjelpe deg å kontrollere om koden din fungerer og påpeke mulige problemer hvis det er noen. Imidlertid, det vil ikke gi deg muligheten til å kontrollere hvordan en HTML-mal for e-post som er utført.,
Falske SMTP-server
Falske SMTP server imiterer arbeid av en ekte 3. parts web-server. I flere eksempler i dette innlegget, vi vil bruke Mailtrap. Utover testing sending av e-post, vil det la oss sjekke hvordan e-posten vil bli gjengitt og vises gjennom meldingen raw-data, så vel som vil gi oss en spam-rapporten., Mailtrap er svært enkel å sette opp: du må bare kopiere legitimasjon generert av applikasjonen og lime dem inn koden din.
Her er hvordan det ser ut i praksis:
Mailtrap gjør ting enda enklere. Gå til Integrasjoner delen i SMTP-innstillinger-fanen og få den klar-til-bruk mal av den enkle budskap, med din Mailtrap legitimasjon i det., Det er den mest grunnleggende alternativet for å instruere din Python-skript på hvem du sender hva til hvem som er sendmail() metode for eksempel:
Prøv Mailtrap for Gratis
koden ser ganske grei, ikke sant? La oss ta en nærmere titt på det og legge til noen feil håndtering (se #forklaringer i mellom). For å ta feil, bruker vi «prøve» og «unntatt» blokker. Se dokumentasjonen for liste over unntak her.,
Når du får Tilsendt resultatet i Shell, bør du se din melding i din Mailtrap innboks:
Sender HTML e-post
I de fleste tilfeller, må du legge til noen formatering, lenker, eller bilder til e-post varsler. Vi kan rett og slett sette alle disse med HTML-innhold. For dette formål, Python har en e-post pakke.
Vi vil tilbyr med MIME-melding typen, som er i stand til å kombinere HTML og ren tekst. I Python er det håndtert av e-post.mime-modul.,
Det er bedre å skrive en tekst-versjon og en HTML-versjon separat, og deretter flette dem med MIMEMultipart(«alternative») eksempel. Det betyr at en slik melding har to gjengivelse valg i henhold til dette. I tilfelle en HTML er ikke gjengis suksess for noen grunn, en tekst versjonen vil fortsatt være tilgjengelig.
Input:
Output:
Sende e-post med vedlegg i Python
Det neste trinnet i å mestre sende e-post med Python er å legge ved filer., Vedlegg er fortsatt MIME-objekter, men vi trenger å kode dem med base64-modul. Et par viktige punkter om vedlegg:
- Python lar deg koble til tekst-filer, bilder, audio-filer og programmer. Du trenger bare å bruke den aktuelle e-klasse som e-post.mime.lyd.MIMEAudio eller e-post.mime.bilde.MIMEImage. For full informasjon, kan du se denne delen av Python dokumentasjon. Du kan også sjekke eksempler gitt av Python for en bedre forståelse.
- Huske om filstørrelse: sende filer over 20 mb er en dårlig praksis.,
I transaksjons-e-post, PDF-filer er de mest brukte: vi vanligvis får på kvitteringer, billetter, boardingkort, bestillinger konfirmasjon, osv. Så la oss se på hvordan å sende et boarding pass, som en PDF-fil.
Input:
for Å legge ved flere filer, kan du ringe meldingen.fest () – metoden flere ganger.
Hvordan å sende en e-post med bilder
Bilder, selv om de er en del av meldingen, er vedlegg som godt., Det er tre typer av dem: CID vedlegg (embedded som en MIME-objekt), base64-bilder (inline embedding), og koblede bilder. Vi har beskrevet sine særegenheter, fordeler og ulemper, og for kompatibilitet med de fleste e-post klienter i dette innlegget.
La oss hoppe til eksempler.
For å legge til en CID vedlegg, vil vi opprette en MIME-melding med flere deler med MIMEImage komponent:
Output:
CID bildet er vist både som en del av HTML-melding, og som et vedlegg., Meldinger med dette bildet typen er ofte regnet som spam: sjekk analyser-fanen i Mailtrap å se spam pris og anbefalinger på sin forbedring. Mange e – postklienter- Gmail-spesielt – ikke vis CID bilder i de fleste tilfeller. Så la oss se på hvordan å bygge en base64-kodet bilde.
Her vil vi bruke base64-modul og eksperimentere med det samme bildet file:
Output:
Nå bildet er innebygd i HTML-melding og er ikke tilgjengelig som en vedlagt fil., Python har kodet våre jpg-bilde, og hvis vi går til HTML-Kilden-fanen, og vi vil se den lange image data streng i img src.
Hvordan å sende flere e-poster i Python
Sender flere e-poster til forskjellige mottakere og gjør dem personlig er det spesielle ting om e-poster i Python.
for Å legge til flere mottakere, kan du bare skrive inn adresser i separert med et komma, legg til KOPI og BLINDKOPI. Men hvis du jobber med en bulk sending av e-post, Python vil spare deg med løkker.
Ett av alternativene er å opprette en database i .,csv-format (vi antar at det er lagret i samme mappe som Python-script).
Vi ofte se våre navn i overførbar eller selv kampanje eksempler. Her er hvordan vi kan gjøre det med Python.
La oss organisere liste i en enkel tabell med to kolonner: navn og e-postadresse. Det skal se ut som i følgende eksempel:
#name,emailJohn Johnson,[email protected] Peterson,[email protected]
– koden nedenfor vil åpne filen og loop over radene linje for linje, skifte {name} med verdi fra «navn» – kolonnen.,
Input:
Når du kjører skriptet, får vi følgende svar:
Sent to John JohnsonSent to Peter Peterson>>>
Output
I vår Mailtrap innboks, ser vi to meldinger: en for John Johnson og en annen for Peter Peterson, levert samtidig:
Sende e-post med Python via Gmail
Når du er klar til å sende e-post til reelle mottakere, kan du konfigurere din produksjon server. Det er også avhengig av dine behov, mål og preferanser: din localhost eller en annen ekstern SMTP.,
En av de mest populære alternativene er Gmail-så la oss ta en nærmere titt på det.
Vi kan ofte se titler som «Hvordan du setter opp en Gmail-konto for utvikling». Faktisk, det betyr at du vil opprette en ny Gmail-konto, og bruk den for et bestemt formål.
for Å være i stand til å sende e-post via din Gmail-konto, du trenger å gi tilgang til det for å få din søknad. Du kan Tillate mindre sikker apps, eller dra nytte av OAuth2 autorisasjon protokollen. Det er på en måte mer vanskelig, men anbefales på grunn av de sikkerhetsmessige grunner.,
Videre, for å bruke en Gmail-serveren, trenger du å vite:
- server name = smtp.gmail.com
- port = 465 for SSL/TLS-tilkobling (foretrukket)
- eller port = 587 for STARTTLS-tilkobling.
- brukernavn = din Gmail-e-post-adresse
- password = passord.
Hvis du har en tendens til å enkelhet, så kan du bruke Yagmail, dedikert Gmail/SMTP. Det gjør sending av e-post virkelig enkelt., Bare sammenligne eksemplene ovenfor med disse flere linjer med kode:
E-post-tjenester
Gmail er gratis og mye brukt, men den har fortsatt begrensninger for sending av e-post. Hvis dine behov går langt utover Gmail regler, velg fra et av de transaksjonsbaserte tjenester valg, eller som de er også kalt, e-API-tjenester.
Python er støttet av et stort flertall av pålitelige e-Api slik at du kan velge i henhold til dine preferanser og budsjett.,
Her er noen guider på å sende e-post med Python gjennom listen av de mest populære tjenester:
- Amazon SES
- Mailgun
- Mandrill
- Poststempel
- Sendgrid
- SocketLabs
Neste trinn med e-post i Python
Vi har vist bare grunnleggende valg av sender e-post med Python, for å beskrive den logikk og et utvalg av sine evner. For å få gode resultater, vi anbefaler at du leser Python dokumentasjon og bare eksperimentere med din egen kode!,
Det finnes en haug av ulike Python rammer og biblioteker, som gjøre å lage apps mer elegant og dedikert. I særdeleshet, noen av dem kan bidra til å forbedre din opplevelse med å bygge e-post sende funksjonalitet:
Den mest populære rammer er:
- Kolbe, som tilbyr et enkelt grensesnitt for sending av e-post— Kolbe e-Post.
- Django, som kan være et flott alternativ for bygging av HTML-maler. (Og her er vår tutorial på å sende e-post med Django).
- Zope kommer i hendig for utvikling av nettstedet.,
- Marg Mailer er en dedikert e-post levering rammeverk for å legge til ulike nyttig konfigurasjoner.
- Plotly og dens Dash kan hjelpe med post grafer og rapporter.