Krajta

Odeslání e-mailu v Pythonu

Odeslání e-mailu v Pythonu
Odeslání e-mailu je jedním z nejčastějších úkolů, které musím udělat ve webových aplikacích a dalších projektech, které vytvářím. S Pythonem je to docela jednoduché a snadné. I když potřebujeme využít některé předdefinované šablony, Python nám pomáhá nahradit zástupné hodnoty skutečnými daty, takže konečný e-mail vypadá elegantně a je plný detailů, díky nimž je můj klient šťastný.

V této lekci budu sdílet skript, který používám k odesílání e-mailů uživatelům aplikací, které vytvářím, a dalších.

Co budeme dělat?

Vytvoříme jednoduchý program v Pythonu, který provede následující:

Díky těmto bodům je tento program mnohem blíže skutečnému používání odesílání e-mailů ve vašich aplikacích. Začněme.

Soubor pro e-maily

Soubor, který obsahuje e-maily pro uživatele, bude vypadat takto:

Shubham shubham.code @ gmail.com

Jedná se pouze o jednoduchý textový soubor, který obsahuje jméno uživatele a e-mail oddělené mezerou. Do nového řádku bylo vloženo několik e-mailů s daty každého uživatele. Pojmenovali jsme tento soubor uživatelů.txt.

Použití šablony

Pojďme rychle definovat šablonu, kterou budeme v našem skriptu používat k nahrazování hodnot:

Dobrý den, $ PERSON_NAME,
Tento e-mail jsme odeslali pomocí modulu Python smtplib. Super, správně?
Přeji jasný den!
Na zdraví

Použili jsme řetězec šablony $ PERSON_NAME který bude nahrazen jménem osoby, kterou získáme od uživatelů.soubor txt při odesílání e-mailu.

Získávání uživatelských dat ze souboru

Prvním krokem k odeslání e-mailu uživateli je určit, kam chceme e-maily poslat. Pojďme napsat funkci Pythonu, která přijme název souboru a vrátí nám uživatelské jméno a ID e-mailu, kam je třeba odesílat e-maily:

def get_users_data (název_souboru):
jméno_uživatele = []
user_email = []
s otevřeným (file_name, mode = 'r', encoding = 'utf-8') jako user_file:
pro user_info v user_file:
uživatelské_jméno.připojit (user_info.split () [0])
user_email.připojit (user_info.split () [1])
vrátit uživatelské jméno, uživatelský e-mail

S touto funkcí pouze vrátíme uživatelská jména a e-maily, které dostaneme ze souboru.

Získání objektu šablony

Nyní můžeme analyzovat naši šablonu a získat objekt šablony z textového souboru, který jsme vytvořili:

def read_template (název_souboru):
s otevřeným (file_name, 'r', encoding = 'utf-8') jako msg_template:
msg_template_content = msg_template.číst()
vrátit šablonu (msg_template_content)

Tímto způsobem získáme zpět objekt Template, který můžeme použít k analýze obsahu souboru a provedení nezbytných náhrad za řetězce šablony, jako je jméno uživatele.

Jak probíhá odesílání e-mailů?

Teď, když jsme připraveni na návrh šablony a data uživatele, musíme pochopit, jak se e-mail uživateli skutečně odesílá:

Nastavení připojení SMTP

Pojďme konečně definovat funkci, která pošle e-mail určeným uživatelům. Zde je funkce:

def main ():
user_name, user_email = get_users_data ('uživatelé.txt ') # přečíst podrobnosti o uživateli
message_template = read_template ('zpráva.txt ')
# nastavit server SMTP
smtplib_server = smtplib.SMTP (hostitel = 'smtp.gmail.com ', port = 587)
smtplib_server.starttls ()
smtplib_server.přihlášení (SEND_FROM, EMAIL_PWD)
# Získejte podrobnosti o každém uživateli a pošlete e-mail:
pro jméno, e-mail ve formátu zip (uživatelské_jméno, uživatelský_e-mail):
multipart_message = MIMEMultipart () # vytvořit zprávu
# přidejte do šablony zprávy skutečné jméno osoby
msg = message_template.náhradník (PERSON_NAME = jméno.titul())
# Vytiskne tělo zprávy kvůli nám
tisk (zpráva)
# nastavení parametrů zprávy
multipart_message ['From'] = SEND_FROM
multipart_message ['To'] = e-mail
multipart_message ['Subject'] = "LinuxHint Email"
# přidat do těla zprávy
multipart_message.attach (MIMEText (msg, 'plain'))
# odeslat zprávu přes dříve nastavený server.
smtplib_server.send_message (multipart_message)
del multipart_message
# Ukončete relaci SMTP a ukončete připojení
smtplib_server.přestat()

Ve výše uvedené funkci jsme sledovali každý krok, který jsme uvedli v předchozí části. Vytvořili jsme připojení SMTP a použili jej k odeslání e-mailu.

Kompletní program

V závěrečné části se podívejme na kompletní program, který lze použít k odeslání e-mailu určenému uživateli:

importovat smtplib
z šablony importu řetězce
z e-mailu.mim.vícedílný import MIMEMultipart
z e-mailu.mim.textový import MIMEText
SEND_FROM = 'my-email-here'
EMAIL_PWD = 'moje-heslo-zde'
def get_users_data (název_souboru):
jméno_uživatele = []
user_email = []
s otevřeným (file_name, mode = 'r', encoding = 'utf-8') jako user_file:
pro user_info v user_file:
uživatelské_jméno.připojit (user_info.split () [0])
user_email.připojit (user_info.split () [1])
vrátit uživatelské jméno, uživatelský e-mail
def read_template (název_souboru):
s otevřeným (file_name, 'r', encoding = 'utf-8') jako msg_template:
msg_template_content = msg_template.číst()
vrátit šablonu (msg_template_content)
def main ():
user_name, user_email = get_users_data ('uživatelé.txt ') # přečíst podrobnosti o uživateli
message_template = read_template ('zpráva.txt ')
# nastavit server SMTP
smtplib_server = smtplib.SMTP (hostitel = 'smtp.gmail.com ', port = 587)
smtplib_server.starttls ()
smtplib_server.přihlášení (SEND_FROM, EMAIL_PWD)
# Získejte podrobnosti o každém uživateli a pošlete e-mail:
pro jméno, e-mail ve formátu zip (jméno_uživatele, e-mail uživatele):
multipart_message = MIMEMultipart () # vytvořit zprávu
# přidejte do šablony zprávy skutečné jméno osoby
msg = message_template.náhradník (PERSON_NAME = jméno.titul())
# Vytiskne tělo zprávy kvůli nám
tisk (zpráva)
# nastavení parametrů zprávy
multipart_message ['From'] = SEND_FROM
multipart_message ['To'] = e-mail
multipart_message ['Subject'] = "LinuxHint Email"
# přidat do těla zprávy
multipart_message.attach (MIMEText (msg, 'plain'))
# odeslat zprávu přes dříve nastavený server.
smtplib_server.send_message (multipart_message)
del multipart_message
# Ukončete relaci SMTP a ukončete připojení
smtplib_server.přestat()
pokud __name__ == '__main__':
hlavní()

Když spustíme tento program s ID služby Gmail, můžete narazit na takový problém:

Chyba SMTP Gmailu


Důvodem je, že Gmail neumožňuje prostým skriptům používat Gmail API. Možná budete muset ve svém účtu Gmail deaktivovat bezpečnostní přihlášení. Přečtěte si o tom, jak to udělat pro Gmail, zde.

Závěr

V této lekci jsme se podívali na to, jak můžeme posílat e-maily pomocí Pythonu smtplib modul.

V systému Windows 10 nefunguje levé tlačítko myši
Pokud používáte speciální myš s notebookem nebo stolním počítačem, ale levé tlačítko myši nefunguje ve Windows 10/8/7 z nějakého důvodu uvádíme několi...
Kurzor při psaní v systému Windows 10 skáče nebo se pohybuje náhodně
Pokud zjistíte, že kurzor myši skáče nebo se pohybuje sám, automaticky, náhodně při psaní v notebooku nebo počítači se systémem Windows, pak vám někte...
Jak obrátit směr posouvání myši a touchpadu ve Windows 10
Myš a Touchpadnejenže usnadňují výpočet, ale jsou efektivnější a méně časově náročné. Nemůžeme si představit život bez těchto zařízení, ale přesto je ...