Selles tunnis jagan skripti, mida kasutan enda loodud rakenduste ja muu kasutajate jaoks meilide saatmiseks.
Mida me teeme?
Loome lihtsa Pythoni programmi, mis teeb järgmist:
- E-posti kujundamiseks kasutage meie loodud mallifaili. See saab olema lihtsalt kohapealsete väärtustega tekstipõhine fail.
- Hankige inimese nimi ja e-posti aadress meie tehtud teisest tekstifailist.
Need punktid muudavad selle programmi palju lähemale teie rakendustes e-kirjade saatmise reaalsele kasutamisele. Alustame.
Fail meilide jaoks
Fail, mis sisaldab kasutajate e-kirju, näeb välja selline:
Shubham šubham.kood @ gmail.comSee on lihtsalt lihtne tekstifail, mis sisaldab tühikuga eraldatud kasutaja nime ja e-posti aadressi. Iga kasutaja andmetega on uude ritta pandud mitu e-kirja. Panime sellele failile nimeks kasutajad.txt.
Malli kasutamine
Määratleme kiiresti ka mall, mida kasutame oma skriptis väärtuste asendamiseks:
Tere, $ PERSON_NAME,Saatsime selle meili Pythoni smtplib mooduli abil. Lahe, eks?
Ees on särav päev!
Terviseks
Oleme kasutanud mallistringi $ PERSON_NAME mis asendatakse kasutajatelt saadud inimese nimega.txt-fail meili saatmise ajal.
Kasutajaandmete hankimine failist
Esimene samm kasutajale e-kirja saatmiseks on tuvastada see, kuhu me soovime e-kirjad saata. Kirjutame Pythoni funktsiooni, mis aktsepteerib failinime ja tagastab meile kasutajanime ja e-posti ID-d, kuhu tuleb meilid saata:
def get_users_data (faili nimi):kasutajanimi = []
kasutaja_post = []
avatud (faili_nimi, mode = 'r', encoding = 'utf-8') kasutajafailina:
kasutaja_info jaoks kasutaja_failis:
kasutajanimi.lisa (kasutajainfo.jagama () [0])
user_email.lisa (kasutajainfo.jaotus () [1])
tagastage kasutajanimi, kasutajanimi
Selle funktsiooni abil tagastame lihtsalt kasutaja nimed ja meilid, mille saame failist.
Malliobjekti hankimine
Nüüd saame oma malli sõeluda ja enda loodud tekstifailist malli malli hankida:
def read_template (faili_nimi):avatuna (faili_nimi, 'r', kodeerimine = 'utf-8') msg_template'ina:
msg_template_content = msg_template.loe ()
tagastage mall (msg_template_content)
Sellega saame tagasi malli malli, mida saab kasutada faili sisu sõelumiseks ja mallistringidele vajalike asenduste tegemiseks, näiteks kasutaja nimi.
Kuidas meilisõnumeid saadetakse?
Nüüd, kui oleme mallikujunduse ja kasutajaandmetega valmis, peame mõistma, kuidas meil kasutajale tegelikult saadetakse:
- Looge SMTP-ühendus saatja konto sisselogimisandmetega
- Ehitage mitmeosaline päis koos väljadega Alates, Saaja ja Teema
- Ehitage välja sõnum, mis tuleb saata
- Saada e-kiri SMTP-ühenduse objektiga
SMTP-ühenduse seadistamine
Määratleme lõpuks funktsioon, mis saadab meilisõnumi määratud kasutajatele. Siin on funktsioon:
def main ():user_name, user_email = get_users_data ('kasutajad.txt ') # loe kasutaja üksikasju
message_template = read_template ('sõnum.txt ')
# seadistas SMTP-serveri
smtplib_server = smtplib.SMTP (host = 'smtp.gmail.com ', port = 587)
smtplib_server.starttls ()
smtplib_server.sisselogimine (SEND_FROM, EMAIL_PWD)
# Hankige iga kasutaja üksikasjad ja saatke meil:
nime jaoks, e-posti aadress ZIP-vormingus (kasutajanimi, kasutajanimi):
multipart_message = MIMEMultipart () # loo sõnum
# lisage sõnumimalli tegeliku isiku nimi
msg = message_template.asendaja (PERSON_NAME = nimi.pealkiri ()
# Prindib sõnumi sisu meie huvides
print (msg)
# seadistage sõnumi parameetrid
multipart_message ['From'] = SEND_FROM
multipart_message ['To'] = e-post
multipart_message ['Subject'] = "LinuxHinti e-post"
# lisa sõnumi sisusse
mitmeosaline_sõnum.manus (MIMEText (msg, 'tavaline'))
# saatke sõnum varem seadistatud serveri kaudu.
smtplib_server.send_message (mitmeosaline_sõnum)
del mitmeosaline_sõnum
# Lõpetage SMTP seanss ja sulgege ühendus
smtplib_server.lõpetage ()
Eespool toodud funktsioonis järgisime igat sammu, mille eelmises osas märkisime. Ehitasime SMTP-ühenduse ja kasutasime seda meili saatmiseks.
Täielik programm
Viimases jaotises heitkem pilk kogu programmile, mida saab kasutada e-kirja saatmiseks määratud kasutajale:
import smtplibstringimalli mallist
e-postist.miimika.mitmeosaline import MIMEMitu osa
e-postist.miimika.teksti import MIMETekst
SEND_FROM = 'minu e-post-siia'
EMAIL_PWD = 'minu parool-siin'
def get_users_data (faili_nimi):
kasutajanimi = []
kasutaja_post = []
avatud (faili_nimi, mode = 'r', encoding = 'utf-8') kasutajafailina:
kasutaja_info jaoks kasutaja_failis:
kasutajanimi.lisa (kasutaja_info.poolitama () [0])
user_email.lisa (kasutaja_info.jaotus () [1])
tagastage kasutajanimi, kasutajanimi
def read_template (faili_nimi):
avatuna (faili_nimi, 'r', kodeerimine = 'utf-8') msg_template'ina:
msg_template_content = msg_template.loe ()
tagastage mall (msg_template_content)
def main ():
user_name, user_email = get_users_data ('kasutajad.txt ') # loe kasutaja üksikasju
message_template = read_template ('sõnum.txt ')
# seadistas SMTP-serveri
smtplib_server = smtplib.SMTP (host = 'smtp.gmail.com ', port = 587)
smtplib_server.starttls ()
smtplib_server.sisselogimine (SEND_FROM, EMAIL_PWD)
# Hankige iga kasutaja üksikasjad ja saatke meil:
nime jaoks, e-posti aadress ZIP-vormingus (kasutajanimi, kasutajanimi):
multipart_message = MIMEMultipart () # loo sõnum
# lisage sõnumimalli tegeliku isiku nimi
msg = message_template.asendaja (PERSON_NAME = nimi.pealkiri ()
# Prindib sõnumi sisu meie huvides
print (msg)
# seadistage sõnumi parameetrid
multipart_message ['From'] = SEND_FROM
multipart_message ['Saaja'] = e-post
multipart_message ['Subject'] = "LinuxHinti e-post"
# lisa sõnumi sisusse
mitmeosaline_sõnum.manus (MIMEText (msg, 'tavaline'))
# saatke sõnum varem seadistatud serveri kaudu.
smtplib_server.send_message (mitmeosaline_sõnum)
del mitmeosaline_sõnum
# Lõpetage SMTP seanss ja sulgege ühendus
smtplib_server.lõpetage ()
kui __nimi__ == '__main__':
peamine ()
Kui käivitame selle programmi Gmaili ID-ga, võib teil tekkida selline probleem:
Gmaili SMTP viga
Seda seetõttu, et Gmail ei luba tavalistel skriptidel kasutada Gmaili API-d. Selleks peate võib-olla oma Gmaili kontol turvasisselogimise keelama. Siit saate lugeda, kuidas seda Gmaili jaoks teha.
Järeldus
Selles tunnis vaatasime, kuidas saaksime Pythoni abil e-kirju saata smtplib moodul.