V tej lekciji bom delil skript, ki ga uporabljam za pošiljanje e-pošte uporabnikom aplikacij, ki jih izdelujem, in še več.
Kaj bomo počeli?
Ustvarili bomo preprost program Python, ki bo naredil naslednje:
- Za oblikovanje e-pošte uporabite datoteko predloge, ki jo ustvarimo. To bo samo besedilna datoteka z nadomestnimi vrednostmi.
- Pridobite ime in e-pošto osebe iz druge besedilne datoteke, ki jo izdelamo.
S temi točkami je ta program veliko bližje resnični uporabi pošiljanja e-pošte v vaših aplikacijah. Začnimo.
Datoteka za e-pošto
Datoteka, ki vsebuje e-poštna sporočila za uporabnike, bo videti tako:
Shubham shubham.koda @ gmail.comTo je le preprosta besedilna datoteka, ki vsebuje uporabniško ime in e-poštni naslov, ločena s presledkom. Več e-poštnih sporočil je bilo s podatki vsakega uporabnika postavljeno v novo vrstico. Datoteko smo poimenovali uporabnikov.txt.
Uporaba predloge
Na hitro določimo tudi predlogo, ki jo bomo v našem skriptu uporabili za zamenjavo vrednosti:
Pozdravljeni, $ PERSON_NAME,To e-poštno sporočilo smo poslali s pomočjo modula Python smtplib. Kul, kajne?
Lep dan naj bo pred vami!
Na zdravje
Uporabili smo niz predloge $ PERSON_NAME ki bo nadomeščeno z imenom osebe, ki jo dobimo od uporabnikov.txt med pošiljanjem e-pošte.
Pridobivanje uporabniških podatkov iz datoteke
Prvi korak za pošiljanje e-pošte uporabniku je ugotoviti, kam želimo poslati e-pošto. Napišimo funkcijo Python, ki bo sprejela ime datoteke in nam vrnila imena uporabnikov in e-poštne ID-je, kamor je treba poslati e-pošto:
def get_users_data (ime_datoteke):uporabniško ime = []
user_email = []
z odprtim (ime_datoteke, način = 'r', kodiranje = 'utf-8') kot uporabniška_datoteka:
za user_info v user_file:
uporabniško_ime.priloži (user_info.split () [0])
user_email.priloži (user_info.split () [1])
vrni uporabniško ime, uporabniška pošta
S to funkcijo vrnemo uporabnikova imena in e-poštna sporočila, ki jih dobimo iz datoteke.
Pridobivanje predmeta predloge
Zdaj lahko razčlenimo našo predlogo in dobimo objekt predloge iz besedilne datoteke, ki smo jo izdelali:
def read_template (ime_datoteke):z odprtim (ime_datoteke, 'r', encoding = 'utf-8') kot msg_template:
msg_template_content = msg_template.preberi ()
vrni predlogo (msg_template_content)
S tem bomo dobili nazaj predmet Predloga, s pomočjo katerega bomo razčlenili vsebino datoteke in izvedli potrebne zamenjave za nize predloge, kot je uporabniško ime.
Kako poteka pošiljanje e-pošte?
Zdaj, ko smo pripravljeni na oblikovanje predloge in uporabnikove podatke, moramo razumeti, kako se uporabniku dejansko pošlje e-poštno sporočilo:
- Ustvarite povezavo SMTP z poverilnicami za prijavo za pošiljateljev račun
- Sestavite večdelno glavo z informacijami s polji Od, Do in Zadeva
- Sestavite telo sporočila, ki ga je treba poslati
- Pošljite e-pošto z objektom povezave SMTP
Nastavitev povezave SMTP
Končno določimo funkcijo, ki bo poslala e-pošto določenim uporabnikom. Tu je funkcija:
def main ():user_name, user_email = get_users_data ('uporabniki.txt ') # preberite podrobnosti o uporabniku
message_template = read_template ('sporočilo.txt ')
# nastavite strežnik SMTP
smtplib_server = smtplib.SMTP (gostitelj = 'smtp.gmail.com ', vrata = 587)
smtplib_server.starttls ()
smtplib_server.prijava (SEND_FROM, EMAIL_PWD)
# Pridobite podrobnosti o vsakem uporabniku in pošljite e-pošto:
za ime, e-poštni naslov v zip (uporabniško ime, uporabniška pošta):
multipart_message = MIMEMultipart () # ustvari sporočilo
# v predlogo sporočila dodajte dejansko ime osebe
msg = predloga_predloge.nadomestek (PERSON_NAME = ime.naslov ())
# Natisne telo sporočila zaradi nas
tiskanje (sporočilo)
# nastavite parametre sporočila
multipart_message ['From'] = SEND_FROM
multipart_message ['Do'] = e-pošta
multipart_message ['Subject'] = "LinuxHint Email"
# dodaj v telo sporočila
sporočilo več delov.priloži (MIMEText (msg, 'navaden'))
# pošljite sporočilo prek prej nastavljenega strežnika.
smtplib_server.send_message (multipart_message)
del multipart_message
# Prekinite sejo SMTP in zaprite povezavo
smtplib_server.prenehati()
V zgornji funkciji smo sledili vsakemu koraku, ki smo ga navedli v prejšnjem poglavju. Zgradili smo povezavo SMTP in jo uporabili za pošiljanje e-pošte.
Celoten program
V zadnjem poglavju si oglejmo celoten program, ki ga lahko uporabimo za pošiljanje e-pošte določenemu uporabniku:
uvozi smtplibiz niza uvozna predloga
iz e-pošte.mimika.večdelni uvoz MIMEMultipart
iz e-pošte.mimika.Uvoz besedila MIMEText
SEND_FROM = 'moj-email-tukaj'
EMAIL_PWD = 'moje-geslo-tukaj'
def get_users_data (ime_datoteke):
uporabniško_ime = []
user_email = []
z odprtim (ime_datoteke, način = 'r', kodiranje = 'utf-8') kot uporabniška_datoteka:
za user_info v user_file:
uporabniško_ime.priloži (user_info.split () [0])
user_email.priloži (user_info.split () [1])
vrni uporabniško ime, uporabniška pošta
def read_template (ime_datoteke):
z odprtim (ime_datoteke, 'r', encoding = 'utf-8') kot msg_template:
msg_template_content = msg_template.preberi ()
vrni predlogo (msg_template_content)
def main ():
user_name, user_email = get_users_data ('uporabniki.txt ') # preberite podrobnosti o uporabniku
message_template = read_template ('sporočilo.txt ')
# nastavite strežnik SMTP
smtplib_server = smtplib.SMTP (gostitelj = 'smtp.gmail.com ', vrata = 587)
smtplib_server.starttls ()
smtplib_server.prijava (SEND_FROM, EMAIL_PWD)
# Pridobite podrobnosti o vsakem uporabniku in pošljite e-pošto:
za ime, e-poštni naslov v zip (uporabniško ime, uporabniška pošta):
multipart_message = MIMEMultipart () # ustvari sporočilo
# v predlogo sporočila dodajte dejansko ime osebe
msg = predloga_predloge.nadomestek (PERSON_NAME = ime.naslov ())
# Natisne telo sporočila zaradi nas
tiskanje (sporočilo)
# nastavite parametre sporočila
multipart_message ['From'] = SEND_FROM
multipart_message ['Do'] = e-pošta
multipart_message ['Subject'] = "LinuxHint Email"
# dodaj v telo sporočila
sporočilo več delov.priloži (MIMEText (msg, 'plain'))
# pošljite sporočilo prek prej nastavljenega strežnika.
smtplib_server.send_message (multipart_message)
del multipart_message
# Prekinite sejo SMTP in zaprite povezavo
smtplib_server.prenehati()
če je __name__ == '__main__':
glavni ()
Ko zaženemo ta program z Gmailovim ID-jem, se lahko soočite s težavo, kot je ta:
Napaka Gmaila SMTP
To je zato, ker Gmail ne dovoljuje uporabe navadnih skriptov za Gmail API. Za to boste morda morali onemogočiti varnostno prijavo v svojem Gmail računu. O tem, kako to narediti za Gmail, preberite tukaj.
Zaključek
V tej lekciji smo preučili, kako lahko s pomočjo Pythona pošiljamo e-pošto smtplib modul.