Piton

Slanje e-pošte u Pythonu

Slanje e-pošte u Pythonu
Slanje e-pošte jedan je od najčešćih zadataka koje moram raditi u web aplikacijama i drugim projektima koje stvaram. S Pythonom je to sasvim jednostavno i lako učiniti. Čak i kad trebamo koristiti neke unaprijed definirane predloške, Python nam pomaže zamijeniti vrijednosti rezerviranih mjesta stvarnim podacima tako da konačna e-pošta izgleda elegantno i ispunjena detaljima što mog klijenta čini sretnim.

U ovoj ću lekciji podijeliti skriptu koju koristim za slanje e-pošte korisnicima aplikacija koje izrađujem i više.

Što ćemo raditi?

Stvorit ćemo jednostavan program Python koji će učiniti sljedeće:

Te točke čine ovaj program mnogo bližim stvarnom korištenju slanja e-pošte u vašim aplikacijama. Započnimo.

Datoteka za e-poštu

Datoteka koja sadrži e-poštu za korisnike izgledat će ovako:

Shubham shubham.kod @ gmail.com

Ovo je samo jednostavna tekstualna datoteka koja sadrži korisničko ime i e-poštu odvojenu razmakom. Više podataka e-pošte stavljeno je s podacima svakog korisnika u novi redak. Nazvali smo ovu datoteku korisnika.txt.

Korištenje predloška

Dopustite nam da brzo definiramo i predložak koji ćemo koristiti u našoj skripti za zamjenu vrijednosti:

Pozdrav $ PERSON_NAME,
Ovu e-poštu poslali smo pomoću Python smtplib modula. Kul, točno?
Pred vama je vedar dan!
Živjeli

Koristili smo niz predložaka $ PERSON_NAME koje će biti zamijenjeno imenom osobe koju dobivamo od korisnika.txt datoteku tijekom slanja e-pošte.

Dohvaćanje korisničkih podataka iz datoteke

Prvi korak za slanje e-pošte korisniku je identificiranje mjesta na koje želimo poslati e-poštu. Napišimo Python funkciju koja će prihvatiti ime datoteke i vraća nam korisničko ime i ID adrese e-pošte na koje treba poslati e-poštu:

def get_users_data (ime_datoteke):
korisničko ime = []
user_email = []
s otvorenim (ime_datoteke, mod = 'r', encoding = 'utf-8') kao user_file:
za user_info u user_file:
Korisničko ime.dodati (user_info.split () [0])
user_email.dodati (user_info.split () [1])
vrati korisničko ime, korisnička_email

Ovom funkcijom samo vraćamo korisnikova imena i e-adrese koje dobivamo iz datoteke.

Dobivanje predmeta predloška

Sada možemo raščlaniti naš predložak i dobiti objekt predloška iz tekstualne datoteke koju smo napravili:

def read_template (ime_datoteke):
s otvorenim (ime_datoteke, 'r', encoding = 'utf-8') kao msg_template:
msg_template_content = msg_template.čitati()
vrati predložak (msg_template_content)

Ovim ćemo dobiti natrag objekt Predložak koji možemo koristiti za raščlanjivanje sadržaja datoteke i izvršiti potrebne zamjene za nizove predloška poput korisničkog imena.

Kako se vrši slanje e-pošte?

Sad kad smo spremni s dizajnom predloška i korisničkim podacima, moramo razumjeti kako se e-pošta zapravo šalje korisniku:

Postavljanje SMTP veze

Idemo konačno definirati funkciju koja će e-poštu poslati određenim korisnicima. Evo funkcije:

def glavni ():
user_name, user_email = get_users_data ('korisnici.txt ') # pročitajte korisničke pojedinosti
message_template = read_template ('poruka.txt ')
# postavite SMTP poslužitelj
smtplib_server = smtplib.SMTP (host = 'smtp.gmail.com ', priključak = 587)
smtplib_server.starttls ()
smtplib_server.prijava (SEND_FROM, EMAIL_PWD)
# Dohvatite svaki detalj korisnika i pošaljite e-poštu:
za ime, e-mail u zip-u (korisničko ime, korisnička_email):
multipart_message = MIMEMultipart () # stvori poruku
# u predložak poruke dodajte stvarno ime osobe
msg = predložak_poruke.zamjena (PERSON_NAME = ime.titula())
# Ispisuje tijelo poruke radi nas
ispis (msg)
# postavite parametre poruke
multipart_message ['From'] = SEND_FROM
multipart_message ['To'] = e-pošta
multipart_message ['Subject'] = "LinuxHint e-pošta"
# dodaj u tijelo poruke
višedijelna_poruka.priloži (MIMEText (msg, 'plain'))
# pošaljite poruku putem ranije postavljenog poslužitelja.
smtplib_server.poslati_poruku (više dijelova_poruke)
del multipart_message
# Prekinite SMTP sesiju i zatvorite vezu
smtplib_server.prestati()

U gornjoj smo funkciji slijedili svaki korak koji smo naveli u prethodnom odjeljku. Konstruirali smo SMTP vezu i koristili je za slanje e-pošte.

Kompletan program

U posljednjem odjeljku, pogledajmo cjeloviti program koji se može koristiti za slanje e-pošte određenom korisniku:

uvoz smtplib
iz predloška za uvoz niza
s e-maila.mimika.višedijelni uvoz MIMEMultipart
iz e-maila.mimika.uvoz teksta MIMEText
SEND_FROM = 'moj-e-mail-ovdje'
EMAIL_PWD = 'moja-lozinka-ovdje'
def get_users_data (ime_datoteke):
korisničko ime = []
user_email = []
s otvorenim (ime_datoteke, mod = 'r', encoding = 'utf-8') kao user_file:
za user_info u user_file:
Korisničko ime.dodati (user_info.split () [0])
user_email.dodati (user_info.split () [1])
vrati korisničko ime, korisnička_email
def read_template (ime_datoteke):
s otvorenim (ime_datoteke, 'r', encoding = 'utf-8') kao msg_template:
msg_template_content = msg_template.čitati()
vrati predložak (msg_template_content)
def glavni ():
user_name, user_email = get_users_data ('korisnici.txt ') # pročitajte detalje o korisniku
message_template = read_template ('poruka.txt ')
# postavite SMTP poslužitelj
smtplib_server = smtplib.SMTP (host = 'smtp.gmail.com ', priključak = 587)
smtplib_server.starttls ()
smtplib_server.prijava (SEND_FROM, EMAIL_PWD)
# Dohvatite svaki detalj korisnika i pošaljite e-poštu:
za ime, e-mail u zip-u (korisničko ime, korisnička_email):
multipart_message = MIMEMultipart () # stvori poruku
# u predložak poruke dodajte stvarno ime osobe
msg = predložak_poruke.zamjena (PERSON_NAME = ime.titula())
# Ispisuje tijelo poruke radi nas
ispis (msg)
# postavite parametre poruke
multipart_message ['From'] = SEND_FROM
multipart_message ['To'] = e-pošta
multipart_message ['Subject'] = "LinuxHint e-pošta"
# dodaj u tijelo poruke
višedijelna_poruka.priloži (MIMEText (msg, 'plain'))
# pošaljite poruku putem ranije postavljenog poslužitelja.
smtplib_server.poslati_poruku (multipart_message)
del multipart_message
# Prekinite SMTP sesiju i zatvorite vezu
smtplib_server.prestati()
ako je __name__ == '__glavno__':
glavni()

Kada pokrenemo ovaj program s Gmail ID-om, mogli biste se suočiti s problemom poput ovog:

Gmail SMTP pogreška


To je zato što Gmail ne dopušta da obične skripte koriste Gmail API. Zbog toga ćete možda morati onemogućiti sigurnosnu prijavu na svoj Gmail račun. O tome kako to učiniti za Gmail pročitajte ovdje.

Zaključak

U ovoj smo lekciji pogledali kako možemo slati e-poštu pomoću Pythona smtplib modul.

10 najboljih igara za igranje na Ubuntuu
Windows platforma bila je jedna od dominantnih platformi za igre zbog ogromnog postotka igara koje se danas razvijaju kako bi podržavale Windows. Može...
5 najboljih arkadnih igara za Linux
U današnje vrijeme računala su ozbiljni strojevi koji se koriste za igre na sreću. Ako ne uspijete dobiti novi visoki rezultat, znat ćete na što misli...
Bitka za Wesnoth 1.13.6 Razvoj objavljen
Bitka za Wesnoth 1.13.6 objavljeno prošlog mjeseca, šesto je razvojno izdanje u izdanju 1.13.x series i donosi niz poboljšanja, ponajviše korisničkog ...