co potřebujete k odeslání e-mailu s Pythonem? Některé základní programování a webové znalosti spolu se základními dovednostmi Pythonu. Předpokládáme, že jste již měli webovou aplikaci vytvořenou s tímto jazykem a nyní musíte rozšířit její funkčnost o oznámení nebo jiné odesílání e-mailů. Tento tutoriál vás provede nejdůležitější kroky odesílání e-mailů přes SMTP server:
- Konfigurace serveru pro testování (víš, proč je to důležité?,)
- Lokální SMTP server
- Mailtrap falešný SMTP server
- Různé typy e-mailů: HTML, obrázků a příloh
- Odesílání více personalizované e-maily (Python je prostě neocenitelná pro e-automatizace)
- Některé populární volby odeslání e-mailu, jako je Gmail a transakční e-mailové služby
podáváme s četnými příklady kódu!
Poznámka: psáno a testováno na Pythonu 3.7.2.
odeslání e-mailu pomocí SMTP
první dobrou zprávou o Pythonu je, že má vestavěný modul pro odesílání e-mailů prostřednictvím SMTP ve své standardní knihovně., Nevyžadují se žádné další instalace ani triky. Můžete importovat modul pomocí následující prohlášení:
import smtplib
ujistěte Se, že modul byl řádně dovezeno a získat úplný popis jeho třídy a argumenty typu v interaktivní Python zasedání:
help(smtplib)
V dalším kroku, budeme mluvit trochu o servery: výběr správné možnosti a konfigurace.,
SMTP server pro testování e-mailů v Pythonu
při vytváření nové aplikace nebo přidávání jakýchkoli funkcí, zejména když to děláte poprvé, je nezbytné experimentovat na testovacím serveru. Zde je stručný seznam důvodů:
- nezasáhnete do schránek svých přátel a zákazníků. To je důležité při testování hromadného odesílání e-mailů nebo při práci s e-mailovou databází.
- nebudete zaplavovat vlastní doručenou poštu testovacími e-maily.
- vaše doména nebude na černé listině spamu.,
lokální SMTP server
Pokud dáváte přednost práci v místním prostředí, může být lokální SMTP ladicí server volbou. Za tímto účelem Python nabízí modul smtpd. Má funkci DebuggingServer, která zahodí zprávy, které odesíláte, a vytiskne je do stdout. Je kompatibilní se všemi operačními systémy.,
Nastavte si SMTP server na localhost:1025
python -m smtpd -n -c DebuggingServer localhost:1025
Za účelem spuštění serveru SMTP na portu 25, budete potřebovat oprávnění uživatele root:
sudo python -m smtpd -n -c DebuggingServer localhost:25
To vám pomůže ověřit, zda váš kód funguje a poukázat na možné problémy, pokud existují. Nedá vám však možnost zkontrolovat, jak je vaše šablona HTML e-mailu vykreslena.,
Falešný SMTP server
Falešný SMTP server simuluje práci skutečného 3rd party web server. V dalších příkladech v tomto příspěvku použijeme Mailtrap. Kromě testování odesílání e-mailů nám umožní zkontrolovat, jak bude e-mail vykreslen a zobrazen, zkontrolovat raw data zprávy a také nám poskytne zprávu o spamu., Mailtrap je velmi snadné nastavit: budete potřebovat jen zkopírovat pověření generované aplikací a vložit je do kódu.
Zde je, jak to vypadá v praxi:
Mailtrap dělá věci ještě snadnější. Přejděte do části integrace na kartě nastavení SMTP a získejte připravenou šablonu jednoduché zprávy s přihlašovacími údaji Mailtrap., To je nejvíce základní možnosti, učil Python skript, na který pošle co, kdo je sendmail() metodu instance:
Zkuste Mailtrap Zdarma
kód vypadá docela jednoduché, doprava? Podívejme se na to blíže a přidáme nějaké zpracování chyb (viz #vysvětlení mezi nimi). K zachycení chyb používáme bloky“ try „a“ except“. Seznam výjimek naleznete v dokumentaci zde.,
Jakmile se dostanete Poslal výsledek v Shell, měli byste vidět vaše zprávy ve vašem Mailtrap doručená pošta:
Odesílání HTML e-mail
Ve většině případů, budete muset přidat nějaké formátování, odkazy, nebo obrazy na váš e-mail oznámení. Můžeme jednoduše dát všechny tyto s obsahem HTML. Za tímto účelem má Python e-mailový balíček.
budeme se zabývat typem MIME zprávy, který je schopen kombinovat HTML a prostý text. V Pythonu je zpracován e-mailem.modul mime.,
je lepší napsat textovou verzi a verzi HTML samostatně a poté je sloučit s instancí MIMEMultipart(„alternativa“). To znamená, že taková zpráva má podle toho dvě možnosti Vykreslování. V případě, že HTML není z nějakého důvodu úspěšně vykreslen, bude stále k dispozici textová verze.
Vstup:
Výstup:
Odesílání e-mailů s přílohami v Pythonu
dalším krokem ve zvládnutí odesílání e-mailů s Python je připojování souborů., Přílohy jsou stále objekty MIME, ale musíme je kódovat modulem base64. Několik důležitých bodů o přílohách:
- Python umožňuje připojit textové soubory, obrázky, zvukové soubory a dokonce i aplikace. Stačí použít příslušnou e-mailovou třídu, jako je e-mail.MIM.zvuk.MIMEAudio nebo e-mail.MIM.obrázek.MIMEImage. Úplné informace naleznete v této části dokumentace Pythonu. Také si můžete zkontrolovat příklady poskytované Python pro lepší pochopení.
- nezapomeňte na velikost souboru: odesílání souborů přes 20 MB je špatná praxe.,
v transakčních e-mailech se nejčastěji používají soubory PDF: obvykle získáváme příjmy, vstupenky, palubní vstupenky, potvrzení objednávek atd. Podívejme se tedy, jak poslat palubní vstupenku jako soubor PDF.
Vstup:
připojit několik souborů, můžete volat, zprávy.připojit () metoda několikrát.
jak poslat e-mail s obrázky
obrázky, i když jsou součástí těla zprávy, jsou také přílohy., Existují tři typy: přílohy CID (Vložené jako objekt MIME), obrázky base64 (vkládání inline) a propojené obrázky. Popsali jsme jejich zvláštnosti, klady a zápory a kompatibilitu s většinou e-mailových klientů v tomto příspěvku.
pojďme přejít na příklady.
Pro přidání CID přílohu, vytvoříme MIME multipart zprávu s MIMEImage součásti:
Výstup:
CID obraz je zobrazen jako část zprávy ve formátu HTML a jako přílohu., Zprávy s tímto typem obrázku jsou často považovány za spam: zkontrolujte kartu Analytics v Mailtrap a podívejte se na rychlost spamu a doporučení týkající se jeho zlepšení. Mnoho e-mailových klientů-zejména Gmail-ve většině případů nezobrazuje obrázky CID. Podívejme se tedy na to, jak vložit základ64 kódovaný obrázek.
Zde budeme používat modul base64 a experiment se stejným souboru obrázku:
Výstup:
Nyní je vložený obrázek do HTML zprávy, a není k dispozici jako přiložený soubor., Python zakódoval náš obrázek jpg a pokud přejdeme na kartu zdroj HTML, uvidíme dlouhý řetězec obrazových dat v img src.
jak posílat více e-mailů v Pythonu
odesílání více e-mailů různým příjemcům a jejich osobní je zvláštní věc o e-mailech v Pythonu.
Chcete-li přidat několik dalších příjemců, stačí zadat jejich adresy oddělené čárkou, přidat CC a BCC. Pokud však pracujete s hromadným odesláním e-mailu, Python vám ušetří smyčky.
jednou z možností je vytvoření databáze v a .,formát csv (předpokládáme, že je uložen do stejné složky jako skript Python).
naše jména často vidíme v transakčních nebo dokonce propagačních příkladech. Zde je návod, jak to udělat s Pythonem.
uspořádejme seznam v jednoduché tabulce se dvěma sloupci: Jméno a e-mailová adresa. To by měl vypadat jako následující příklad:
#name,emailJohn Johnson,[email protected] Peterson,[email protected]
následující kód otevře soubor a smyčky nad jeho řádky, řádek po řádku, nahradí {název} s hodnotou od sloupci „název“.,
Vstup:
Po spuštění skriptu, dostaneme následující odpověď:
Sent to John JohnsonSent to Peter Peterson>>>
Výstupní
V naší Mailtrap doručená pošta, vidíme dvě zprávy: jednu pro John Johnson a další pro Peter Peterson, dodáno současně:
Odesílání e-mailů s Python přes Gmail
Když jste připraveni pro odesílání e-mailů na skutečné příjemcům, můžete nastavit své produkční server. Záleží také na vašich potřebách, cílech a preferencích: localhost nebo externí SMTP.,
jednou z nejpopulárnějších možností je Gmail, takže se na to podívejme blíže.
často vidíme tituly jako „jak nastavit účet Gmail pro vývoj“. Ve skutečnosti to znamená, že si vytvoříte nový účet Gmail a použijete jej pro určitý účel.
abyste mohli odesílat e-maily prostřednictvím svého účtu Gmail, musíte k němu poskytnout přístup pro vaši aplikaci. Můžete povolit méně zabezpečené aplikace nebo využít autorizačního protokolu OAuth2. Je to mnohem obtížnější, ale doporučuje se z bezpečnostních důvodů.,
Dále, používat Gmail server, potřebujete vědět:
- název serveru = smtp.gmail.com
- port = 465 pro SSL/TLS připojení (doporučeno)
- nebo port = 587 pro STARTTLS připojení.
- username = your Gmail email address
- password = your password.
Pokud máte sklon k jednoduchosti, můžete použít yagmail, vyhrazený Gmail/SMTP. To dělá odesílání e-mailů opravdu snadné., Stačí porovnat výše uvedené příklady s těmito několika řádky kódu:
Transakční e-mailové služby
Gmail je zdarma a široce používané, ale stále má svá omezení pro odesílání e-mailu. Pokud vaše potřeby přesahují pravidla Gmailu, vyberte si z jedné z možností transakčních služeb, nebo jak se také nazývají, služby e-mailového API.
Python je podporován drtivou většinou důvěryhodných e-mailových API, takže si můžete vybrat podle svých preferencí a rozpočtu.,
Zde jsou některé návody na odesílání e-mailů s Python přes seznam nejoblíbenějších služeb:
- Amazon SES
- Mailgun
- Mandril
- Známka
- Sendgrid
- SocketLabs
Další kroky s e-maily v Pythonu
prokázali Jsme jen základní možnosti odesílání e-mailů s Python, popsat logiku a rozsah jeho schopností. Chcete-li získat skvělé výsledky, doporučujeme zkontrolovat dokumentaci Python a jen experimentovat s vlastním kódem!,
existuje spousta různých pythonových rámců a knihoven, díky nimž je vytváření aplikací elegantnější a specializovanější. Zejména některé z nich vám může pomoci zlepšit své zkušenosti s budováním e-maily, odesílání funkce:
nejvíce populární rámců jsou:
- Baňky, která nabízí jednoduché rozhraní pro odesílání e-mailu— Baňky Mail.
- Django, což může být skvělá volba pro vytváření šablon HTML. (A tady je náš návod na odesílání e-mailů s Django).
- Zope se hodí pro vývoj webových stránek.,
- Marrow Mailer je vyhrazený rámec pro doručování pošty, který přidává různé užitečné konfigurace.
- Plotly a jeho pomlčka mohou pomoci s poštovními grafy a zprávami.