Šioje pamokoje pasidalinsiu scenarijumi, kurį naudoju siunčiant el. Laiškus savo kuriamų programų vartotojams ir dar daugiau.
Ką mes darysime?
Sukursime paprastą „Python“ programą, kuri atliks šiuos veiksmus:
- El. Pašto dizainui naudokite mūsų sukurtą šablono failą. Tai bus tik tekstinis failas su vietos rezervavimo vertėmis.
- Gaukite asmens vardą ir el. Pašto adresą iš kito mūsų sukurto teksto failo.
Šie punktai daro šią programą daug arčiau realaus el. Laiškų siuntimo jūsų programose. Pradėkime.
Failas el. Laiškams
Failas, kuriame yra vartotojų el. Laiškai, atrodys taip:
Shubham shubham.kodas @ gmail.comTai tik paprastas tekstinis failas, kuriame yra vartotojo vardas ir el. Paštas, atskirti tarpu. Keli el. Laiškai buvo įdėti į kiekvieno vartotojo duomenis naujoje eilutėje. Pavadinome šį failą vartotojų.txt.
Šablono naudojimas
Greitai apibrėžkime šabloną, kurį naudosime scenarijuje pakeisdami vertes:
Sveiki, $ PERSON_NAME,Šį el. Laišką išsiuntėme naudodami „Python smtplib“ modulį. Šaunu, tiesa?
Laukia šviesi diena!
Cheers
Mes naudojome šablono eilutę $ PERSON_NAME kuris bus pakeistas asmens vardu, kurį gausime iš vartotojų.txt failas siunčiant el. laišką.
Gaunami vartotojo duomenys iš failo
Pirmasis žingsnis norint išsiųsti el. Laišką vartotojui yra nustatyti, kur mes norime siųsti el. Laiškus. Parašykime „Python“ funkciją, kuri priims failo pavadinimą ir grąžins mums vartotojo vardą ir el. Pašto ID, kur reikia siųsti el. Laiškus:
def get_users_data (failo_vardas):vartotojo vardas = []
vartotojo_paštas = []
su open (failo_vardas, režimas = 'r', kodavimas = 'utf-8') kaip vartotojo_failas:
for user_info vartotojo_file:
Vartotojo vardas.pridėti (vartotojo_info.padalinti () [0])
vartotojo_el.laiškas.pridėti (vartotojo_info.padalinti () [1])
grąžinti vartotojo vardą, vartotojo el. paštą
Naudodamiesi šia funkcija, mes tiesiog grąžiname vartotojo vardus ir el. Pašto adresus, kuriuos gauname iš failo.
Šablono objekto gavimas
Dabar mes galime išanalizuoti savo šabloną ir gauti šablono objektą iš savo sukurto teksto failo:
def read_template (failo_vardas):su open (failo_vardas, 'r', kodavimas = 'utf-8') kaip msg_template:
msg_template_content = msg_template.skaityti ()
grąžinti šabloną (msg_template_content)
Tai suteiksime šablono objektą, kurį naudosime išanalizuodami failo turinį ir atlikdami būtinus šablonų eilučių pakeitimus, pvz., Vartotojo vardą.
Kaip el. Paštas siunčiamas?
Dabar, kai esame pasirengę šablono dizainą ir vartotojo duomenis, turime suprasti, kaip el. Laiškas iš tikrųjų siunčiamas vartotojui:
- Sukurkite SMTP ryšį naudodami siuntėjo paskyros prisijungimo duomenis
- Sukurkite kelių dalių antraštę su informacija su laukais Nuo, Iki ir Tema
- Sukurkite pranešimo turinį, kurį reikia išsiųsti
- Siųsti el. Laišką su SMTP ryšio objektu
SMTP ryšio nustatymas
Pagaliau apibrėžkime funkciją, kuri išsiųs el. Laišką paskirtiems vartotojams. Čia yra funkcija:
def pagrindinis ():vartotojo_vardas, vartotojo_el.paštas = get_users_data ('vartotojai.txt ') # skaityti išsamią vartotojo informaciją
message_template = skaityti_template ('pranešimas.txt ')
# nustatykite SMTP serverį
smtplib_server = smtplib.SMTP (kompiuteris = 'smtp.gmail.com “, uostas = 587)
smtplib_server.starttls ()
smtplib_server.prisijungti (SEND_FROM, EMAIL_PWD)
# Gaukite kiekvieno vartotojo informaciją ir atsiųskite el. Laišką:
vardui, el. pašto adresui pakuotėje (vartotojo vardas, vartotojo el. paštas):
multipart_message = MIMEMultipart () # sukurkite pranešimą
# pridėkite tikrąjį asmens vardą prie pranešimo šablono
msg = message_template.pakaitalas (PERSON_NAME = vardas.pavadinimas ())
# Mūsų labui išspausdina pranešimo turinį
spausdinti (msg)
# nustatykite pranešimo parametrus
multipart_message ['From'] = SEND_FROM
multipart_message ['To'] = el. paštas
multipart_message ['Subject'] = "LinuxHint Email"
# pridėti pranešimo turinyje
multipart_message.pridėti (MIMEText (msg, 'paprastas'))
# išsiųskite pranešimą per anksčiau nustatytą serverį.
smtplib_server.send_message (multipart_message)
del multipart_message
# Nutraukite SMTP sesiją ir uždarykite ryšį
smtplib_server.mesti ()
Pirmiau pateiktoje funkcijoje mes atlikome kiekvieną žingsnį, kurį nurodėme ankstesniame skyriuje. Sukūrėme SMTP ryšį ir naudojome jį el. Laiškui siųsti.
Užbaigti programą
Paskutiniame skyriuje pažvelkime į visą programą, kurią galima naudoti norint išsiųsti el. Laišką paskirtam vartotojui:
importuoti smtplibiš eilutės importavimo šablono
iš el.mimika.kelių dalių importas
iš el.mimika.teksto importas MIMETekstas
SEND_FROM = 'mano el. Paštas-čia'
EMAIL_PWD = 'mano slaptažodis čia'
def get_users_data (failo_vardas):
vartotojo vardas = []
vartotojo_paštas = []
su open (failo_vardas, režimas = 'r', kodavimas = 'utf-8') kaip vartotojo_failas:
už user_info vartotojo_file:
Vartotojo vardas.pridėti (vartotojo_info.padalinti () [0])
vartotojo_el.laiškas.pridėti (vartotojo_info.padalinti () [1])
grąžinti vartotojo vardą, vartotojo el. paštą
def read_template (failo_vardas):
su open (failo_vardas, 'r', kodavimas = 'utf-8') kaip msg_template:
msg_template_content = msg_template.skaityti ()
grąžinti šabloną (msg_template_content)
def pagrindinis ():
vartotojo_vardas, vartotojo_el.paštas = get_users_data ('vartotojai.txt ') # skaityti išsamią vartotojo informaciją
message_template = skaityti_template ('pranešimas.txt ')
# nustatykite SMTP serverį
smtplib_server = smtplib.SMTP (kompiuteris = 'smtp.gmail.com “, uostas = 587)
smtplib_server.starttls ()
smtplib_server.prisijungti (SEND_FROM, EMAIL_PWD)
# Gaukite kiekvieno vartotojo informaciją ir atsiųskite el. Laišką:
vardui, el. pašto adresui pakuotėje (vartotojo vardas, vartotojo el. paštas):
multipart_message = MIMEMultipart () # sukurkite pranešimą
# pridėkite tikrąjį asmens vardą prie pranešimo šablono
msg = message_template.pakaitalas (PERSON_NAME = vardas.pavadinimas ())
# Mūsų labui išspausdina pranešimo turinį
spausdinti (msg)
# nustatykite pranešimo parametrus
multipart_message ['From'] = SEND_FROM
multipart_message ['To'] = el. paštas
multipart_message ['Subject'] = "LinuxHint Email"
# pridėti pranešimo turinyje
multipart_message.pridėti (MIMEText (msg, 'paprastas'))
# išsiųskite pranešimą per anksčiau nustatytą serverį.
smtplib_server.send_message (multipart_message)
del multipart_message
# Nutraukite SMTP sesiją ir uždarykite ryšį
smtplib_server.mesti ()
jei __pavadinimas = = '__main__':
pagrindinis ()
Kai vykdysime šią programą su „Gmail“ ID, galite susidurti su tokia problema:
„Gmail“ SMTP klaida
Taip yra todėl, kad „Gmail“ neleidžia paprastiems scenarijams naudoti „Gmail“ API. Tam gali tekti išjungti saugos prisijungimą „Gmail“ paskyroje. Apie tai, kaip tai padaryti „Gmail“, skaitykite čia.
Išvada
Šioje pamokoje apžvelgėme, kaip galime siųsti el. Laiškus naudodami „Python“ smtplib modulis.