Python

Pošiljanje e-pošte v Pythonu

Pošiljanje e-pošte v Pythonu
Pošiljanje e-pošte je ena najpogostejših nalog, ki jih moram opraviti v spletnih aplikacijah in drugih projektih, ki jih ustvarjam. S Pythonom je to povsem enostavno in enostavno. Tudi kadar moramo uporabiti nekatere vnaprej določene predloge, nam Python pomaga nadomestiti vrednosti nadomestnih znakov z dejanskimi podatki, tako da je končni e-poštni naslov eleganten in napolnjen s podrobnostmi, kar osrečuje mojo stranko.

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:

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.com

To 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:

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 smtplib
iz 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.

Uporabna orodja za igralce Linux
Če radi igrate igre na Linuxu, obstaja verjetnost, da ste za izboljšanje igralne izkušnje uporabljali aplikacije in pripomočke, kot so Wine, Lutris in...
HD Remastered Games za Linux, ki prej še niso izdale Linuxa
Mnogi razvijalci iger in založniki pripravijo HD remaster starih iger, da podaljšajo življenjsko dobo franšize, zato oboževalci zahtevajo združljivost...
Kako uporabljati AutoKey za avtomatizacijo iger Linux
AutoKey je namizni pripomoček za avtomatizacijo za Linux in X11, programiran v Python 3, GTK in Qt. Z njegovo funkcijo skriptiranja in MACRO lahko avt...