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:

  1. Konfigurace serveru pro testování (víš, proč je to důležité?,)
    • Lokální SMTP server
    • Mailtrap falešný SMTP server
  2. Různé typy e-mailů: HTML, obrázků a příloh
  3. Odesílání více personalizované e-maily (Python je prostě neocenitelná pro e-automatizace)
  4. 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ů:

  1. 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í.
  2. nebudete zaplavovat vlastní doručenou poštu testovacími e-maily.
  3. 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:

  1. 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í.
  2. 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:

  1. Baňky, která nabízí jednoduché rozhraní pro odesílání e-mailu— Baňky Mail.
  2. 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).
  3. Zope se hodí pro vývoj webových stránek.,
  4. Marrow Mailer je vyhrazený rámec pro doručování pošty, který přidává různé užitečné konfigurace.
  5. Plotly a jeho pomlčka mohou pomoci s poštovními grafy a zprávami.