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:
- Upotrijebite datoteku predloška koju kreiramo za dizajn e-pošte. Ovo će biti samo tekstualna datoteka s vrijednostima rezerviranog mjesta.
- Dohvatite ime i e-poštu osobe iz druge tekstualne datoteke koju izrađujemo.
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.comOvo 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:
- Stvorite SMTP vezu s vjerodajnicama za prijavu za račun pošiljatelja
- Napravite višedijelno zaglavlje s informacijama s poljima Od, Do i Predmet
- Napravite tijelo poruke koje treba poslati
- Pošaljite e-poštu s objektom SMTP veze
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 smtplibiz 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.