„Python“

El. Laiškų siuntimas naudojant „Python“

El. Laiškų siuntimas naudojant „Python“
El. Laiškų siuntimas, tikrinimas ir atsakymas į juos yra daug laiko reikalaujanti užduotis, ypač kai tai darote daugybei žmonių ar klientų, kur tiesiog reikia pakeisti gavėjo vardą, adresą, amžių ir kitus smulkmenas. Tai būtų labai sunki užduotis jums parašyti programą, kuri galėtų tvarkyti visų tipų jūsų asmeninius / verslo el. Laiškus, tačiau vis tiek galite automatizuoti daugybę dalykų, kurie galiausiai sutaupys jums daug laiko.

Pvz., Norite išsiųsti savo klientams priminimą apie likusias sąskaitas, o „Excel“ lape ar duomenų bazėje turite visus su klientais susijusius duomenis, pvz., Jų telefonų numerius, adresą, amžių ir kt., O ne rankiniu būdu, galite parašyti paprasta programa „Python“ automatiškai tai padaryti už jus. Šioje pamokoje sužinosime, kaip veikia el. Pašto protokolas ir kaip galite automatizuoti procesą, kad sutaupytumėte brangų laiką.

Žodis apie SMTP

Paprastas pašto perdavimo protokolas (SMTP) yra kompiuterizuotas jūsų pašto paslaugos atitikmuo. Tai protokolas, veikiantis TCP / IP tinklo taikomųjų programų sluoksnyje. Tai standartinis el. Laiškų siuntimo ir gavimo internetu protokolas. Pašto perdavimo procesą sudaro el. Pašto serveriai ir klientai, siunčiantys ir gaunantys el. Laiškus vieni kitiems.

Pavyzdžiui, turite GMAIL paskyrą ir norite išsiųsti el. Laišką savo draugui jo „YAHOO“ paskyroje. Jūs rašote el. Laišką ir paspaudžiate siųsti, bet vidinės programos procesas yra šiek tiek sudėtingas, todėl, norėdami suprasti šį procesą, pirmiausia turėsite suprasti SMTP. Pirmiausia siunčia jūsų SMTP el. Pašto klientas HELO (arba EHLO) į GMAIL serverį, galite sakyti, kad ši komanda ar antraštė yra lygiavertė Šeimininkas antraštė HTTP protokole ir naudojama serveriui identifikuoti naudojant domeno vardą. Po HELO arba EHLO klientas autentikuojasi serveryje naudodamas nurodytą vartotojo vardą ir slaptažodį AUTH komandą. Tada jis nurodo siuntėjo ir gavėjo el. Pašto adresą, tada pranešimo turinį ir siunčia el. Laišką į GMAIL serverį. GMAIL serveris pirmiausia patvirtins, ar egzistuoja gavėjo el. Pašto adresas „YAHOO“, ar ne, tada jis išsiųs el. Laišką į „YAHOO Server“, iš kurio gavėjas gali nusiųsti savo el. Laiškus iš.

SMTPLIB

SMTPLIB yra pitono biblioteka, kuri gali būti naudojama kaip SMTP klientas, kaip ir jūsų GMAIL, YAHOO, Thunderbird ar bet kuri kita el. Pašto programa, ir gali būti naudojama el. Laiškams siųsti. Visas užduotis galime atlikti naudodami SMTPLIB klientą, kuriuos galime atlikti su tais, kurie turi grafinę vartotojo sąsają.

Pagal numatytuosius nustatymus jis pateikiamas „Python“, jei neturite, galite įdiegti naudodami šią komandą.

[apsaugotas el. paštas]: ~ $ pip install smtplib

ARBA „Python“ 3

[apsaugotas el. paštas]: ~ $ pip install smtplib

Pirmojo el. Pašto rašymas naudojant „Python“

Šioje pamokoje kaip siuntėją naudosiu GMAIL paskyrą, taip pat naudosiu „Python“ konsolę, todėl man bus lengviau žingsnis po žingsnio paaiškinti kiekvieną kodo eilutę. Norėdami pradėti, turime leisti GMAIL pasiekti mažiau saugias programas.

Taigi prisijunkite prie savo GMAIL paskyros ir eikite į paskyros nustatymus.

Dabar įsitikinkite, kad įjungta prieiga prie mažiau saugių programų.

Dabar atidarykite savo python konsolę ir pradėkite rašyti savo pirmąjį el. Laišką naudodami „Python“

[apsaugotas el. paštas]: ~ $ python
„Python 2“.7.16 (numatytasis, 2019 m. Spalio 7 d., 17:36:04)
[PĮB 8.3.0] „Linux2“

Norėdami gauti daugiau informacijos, įveskite „pagalba“, „autorių teisės“, „kreditai“ arba „licencija“.

// importuoti SMTP biblioteką
>>> importuoti smtplib
// prisijunkite prie GMAIL serverio naudodami domeno pavadinimą ir prievado numerį (šis parametras skiriasi
kiekvieno el. pašto paslaugų teikėjo, pažiūrėkite į toliau pateiktą lentelę)
>>> mailobj = smtplib.SMTP ('smtp.gmail.com “, 587)
// pasisveikink su serveriu
>>> mailobj.ehlo ()
(250, smtp.gmail.com jūsų paslaugoms, [103.255.4.246] \ nSIZE35882577 \ n8BITMIME \ nSTARTTLS \
PATobulintos būsenos kodai \ nPIPELINING \ nCHUNKING \ nSMTPUTF8 ')
// 587 prievadas reiškia, kad mes naudojame šifruotą TLS ryšį, todėl pradėkite užšifruotą TLS
bendravimas naudojant starttls (), kad mūsų įgaliojimai ir pranešimai nebūtų nusišnekėti
>>> mailobj.starttls ()
(220, '2.0.0 Paruošta pradėti TLS ')
// prisijunkite prie savo GMAIL paskyros naudodami el. pašto adresą ir slaptažodį
>>> mailobj.prisijunkite ('[apsaugotas el. paštas]', 's3cr3t_p4ssw0rd')
(235, '2.7.0 priimta ')
// nurodykite siuntėjo ir gavėjo el. pašto adresą ir el. pašto turinį
>>> mailobj.sendmail ('[email protected]', '[email protected]', 'Tema:
Labas pasauli! \ n Sveikas pasauli! tai mano pirmasis sveiko pasaulio el. paštas „Python“)

// glaudus ryšys su GMAIL serveriu
>>> mailobj.mesti ()
(221, '2.0.0 uždarymo jungtis b6sm4519863lfi.72 - gsmtp ')

Pirmiau pateiktoje pavyzdinėje programoje nurodytą turinį pakeiskite savo. Jei nesate GMAIL vartotojas, galite naudoti savo teikėjo el. Pašto serverį. Čia pateikiamas kai kurių įprastų pašto paslaugų teikėjų domenų vardų ir prievadų sąrašas.

vardas Serverio domeno vardas Uostas
„Gmail“ smtp.gmail.com 587
„Outlook“ / „Hotmail“ smtp-mail.perspektyva.com 587
Yahoo paštas smtp.Paštas.yahoo.com 587
„Verizon“ smtp.verizon.neto 465
Comcast smtp.komiškas.neto 587

Keletas žodžių apie IMAP

Taigi mes ką tik ištyrėme, kad SMTP naudojamas el. Laiškams siųsti, bet kam skirtas IMAP (interneto prieigos pranešimų protokolas)? SMTP negalima naudoti norint ieškoti ir gauti el. Laiškus iš serverio, tam naudojamas IMAP arba POP3 protokolas.

IMAPCLIENT, IMAPLIB ir PYZMAIL

„Python“ yra dvi pagrindinės bibliotekos, kurias galima naudoti kaip IMAP klientą, norint rasti, gauti ir ištrinti el. Laiškus iš pašto serverio. „Python“ turi numatytąjį nustatymą imaplib biblioteka, bet kita išorinė biblioteka neprotingas yra efektyvesnė ir patogesnė naudoti. Šioje pamokoje mes naudosime neprotingas gauti el. laiškus iš pašto serverio.

Problema su neprotingas yra tai, kad jis gauna el. laiškus iš pašto serverio neapdorotu formatu. Taigi, mums reikės pyzmail biblioteka kaip vartotojui patogios išvesties analizatorius. Norėdami įdiegti abi bibliotekas, įveskite

[apsaugotas el. paštu]: ~ $ sudo pip install imapclient
[apsaugotas el. paštas]: ~ $ sudo pip install pyzmail

El. Laiškų gavimas iš pašto serverio

Dabar sužinosime, kaip ieškoti ir atsisiųsti el. Laiškus iš pašto serverio naudojant „imapclient“. Mes naudosime imapclient, norėdami ieškoti ir atsisiųsti el. Laiškus iš serverio, tada naudosime pyzmail, kad išanalizuotume šį neapdorotą turinį. Leiskime

// importuoti nepastovią biblioteką
>>> importuoti nepritaikytą
// Prisijunkite prie GMAIL IMAP serverio
>>> obj = neprotingas.IMAPClient ('imap.gmail.com ', ssl = Tiesa)
// Prisijunkite prie savo el. Pašto paskyros naudodami savo kredencialus
>>> obj.prisijungti ('[apsaugotas el. paštas]', 's3cr4tp4ss')
„[saugoma el. paštu] patvirtinta (pavyko)“
// Pasirinkite pranešimų aplanką, kurį norite perskaityti.El. pašto dėžutė, juodraščiai, išsiųsti laiškai
>>> obj.select_folder ('INBOX', tik skaityti = Tiesa)
'EXISTS': 830, 'PERMANENTFLAGS': (), 'HIGHESTMODSEQ': 112999, 'UIDNEXT': 931,
„FLAGS“: („Atsakyta“, „Pažymėta“, „Juodraštis“, „Ištrinta“, „Matyta“,
„$ NotPhishing“, „$ Phishing“), „UIDVALIDITY“: 1, „TIK SKAITYTI“: ["],„ RECENT “: 0
// Ieškokite pranešimų savo gautuosiuose arba pritaikykite filtrą, bus rodomas žemiau esantis filtras
laiškus, gautus po 2019 m. spalio 25 d
>>> mail_ids = obj.paieška (['SINCE', '25 -Oct-2019 '])
>>> pašto_ID
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
// Sąraše „mail_ids“ yra sąrašas el. Pašto adresų, gautų nuo 2019 m. Spalio 25 d,
galite atsisiųsti el. laišką naudodamiesi imapclient fetch funkcija.
>>> raw_mail = obj.gauti ([919], ['BODY []', 'FLAGS'])
// Dabar „raw_mail“ kintamojo turinys yra neapdoroto formato, jo negalima rodyti
ekraną, todėl mums reikės analizatoriaus, kad būtų galima išanalizuoti šį turinį, kad būtų patogi naudoti
>>> importuoti „pyzmail“
>>> žinutė = pyzmail.„PyzMessage“.gamykla (raw_mail [919] ['BODY []'])
// Dabar el. Paštas yra išanalizuotas ir saugomas pranešimo kintamajame, kad gautumėte temą
laišką, naudokite funkciją get_subject
>>> pranešimas.get_subject ()
u 'Apdailink savo įgūdžius šį Heloviną su 25% nuolaida'
// Panašiai galite pamatyti išsamią siuntėjo informaciją
>>> pranešimas.get_addresses ('from')
[(u'Usama Azad ',' [el. pašto saugoma] ']]
>>> pranešimas.get_addresses ('to')
[(u '[el. pašto saugoma]', '[el. pašto saugoma]')]
// Norėdami gauti el. Laiško turinį, įveskite
>>> pranešimas.teksto dalis.get_payload ().iššifruoti (pranešimas.teksto dalis.simbolis)
u “Sveiki! Mėgaukitės 25% nuolaida mūsų aukščiausios klasės kursuose “

Jei turite paskyrą kitame, išskyrus GMAIL, el. Pašto paslaugų teikėjo puslapyje, galite prisijungti prie jų IMAP serverio. Čia yra kai kurių žinomų pašto paslaugų teikėjų IMAP domenų vardų sąrašas.

Teikėjas IMAP serverio domeno vardas
YAHOO imap.Paštas.yahoo.com
„Hotmail“ / „Outlook“ imap-mail.perspektyva.com
„Verizon“ gaunamas.verizon.neto
Comcast imap.komiškas.neto
AT&T imap.Paštas.at.neto

El. Pašto ištrynimas iš IMAP serverio

Panašiai kaip el. Laiškų paieška ir gavimas iš serverio, taip pat galite ištrinti el. Laiškus iš savo pašto serverio naudodami jų uid. Tiesiog atlikite nurodytus veiksmus

// Norėdami ištrinti el. Laišką, turite kreiptis tik į „False“, jei norite gauti rašymo prieigą prie savo
laiškus
>>> obj.select_folder ('INBOX', readonly = False)
>>> mail_ids = obj.paieška (['SINCE', '25 -Oct-2019 '])
>>> pašto_ID
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
 
// Paleidę žemiau komandą, pateikite el. Pašto adresą arba el. Pašto adresų sąrašą,
jūsų el. paštas dings iš „INBOX“.
>>> obj.delete_messages (919)
919: ('\\ Matyta', '\\ Ištrinta')
 
// Ši komanda visam laikui ištrins jūsų el. Laiškus iš pašto serverio
>>> obj.išmesti ()
('Sėkmė', [])

https: // techtopz.com / build-a-birthday-priminder-application-in-python-on-mac /

Savo gimtadienio priminimo rengimas

Ateinančiais mėnesiais turite savo draugų gimtadienius ir norite jiems palinkėti per jų gimtadienius. Bet jūs turite daug darbo savo biure ir yra galimybė, kad pamiršite jų palinkėti. Taigi šią užduotį galima automatiškai atlikti naudojant pitoną. Toliau pateikiamas kodas atlikti šią užduotį.

// importuojami moduliai
importo re
// os modulis naudojamas operacinės sistemos užduotims atlikti, t.e. prieiga prie direktorijų
importuoti os
importavimo laikas
importuoti smtplib
 
// apibrėžti funkciją, kuri siųs el. laiškus
def send_mail (gavėjo_mail_adresas, vardas):
sender_mail_address = "[el. paštas apsaugotas]"
passwd = "senderPasswd"
// prisijungimas prie „Gmail“ serverio su domeno vardu ir prievado numeriu
obj = smtplib.SMTP ('smtp.gmail.com “, 587)
obj.ehlo ()
obj.starttls ()
// prisijungimas prie jūsų „Gmail“ paskyros
obj.prisijungti (sender_mail_adresas, passwd)
// laiško siuntimas į „reciever_mail_address“.
obj.sendmail (sender_mail_address, reciever_mail_address, "Subject: BirthDay Wishing Mail \ n \ n HappyBirthday" + vardas)
// baigiasi ryšys
obj.mesti ()
// Pagrindinis kūnas
// einame į katalogą, kuriame yra failas, kuriame yra duomenų
os.chdir ("path_to_girthday_data_file")
o 1:
// gauti dabartinės akimirkos datą ir laiką
šiandien = datos laikas.datos laikas.šiandien ()
šiandien = str (šiandien)
// gauti einamieji metai, mėnuo, diena, valanda, minutė ir sekundė
current_year = šiandien [0: 4]
dabartinis mėnuo = šiandien [5: 7]
current_day = šiandien [8:10]
current_hour = šiandien [11:13]
current_minute = šiandien [14:16]
current_sec = šiandien [17:19]
// atidaryti gimtadienio failą objekte „birthday_file“ skaitymo režimu
birthday_file = open ('gimtadienio_failas', 'r')
// išsaugant visas „birthday_file“ eilutes eilučių sąraše
eilutės = gimtadienio_failas.eilutės ()
// uždaryti „gimtadienio_failo“ objektą
gimtadienio_failas.Uždaryti()
// skaitant kiekvieną eilutę naudojant ciklą
linijoms linijose:
// darydami reguliarią išraišką, norėdami rasti datą 'birthday_file'
dateEx = re.kompiliuoti (r "\ d 4 - \ d 2 - \ d 2")
findDate = dateEx.ieškoti (eilutė)
data = rasti datą.grupė ()
// gauti gimtadienio_mėnuo ir gimtadienio dieną iš bylos
gimtadienio mėnuo = data [5: 7]
gimtadienio diena = data [8:10]
// darydami reguliariąją išraišką, kad surastumėte pašto adresą iš birthday_file
mailEx = re.sudaryti (r "\ w * @ \ w *.com ")
findMail = mailEx.ieškoti (eilutė)
reciever_mail = findMail.grupė ()
// darydamas taisyklingą išraišką asmens vardui surasti
nameEx = re.sudaryti (r "\ w *")
findName = vardasEx.ieškoti (eilutė)
name = findName.grupė ()
// tikrinimas ar artėja kieno nors gimtadienis
jei dabartinis mėnuo == gimtadienis ir = dabartinis_ diena == gimtadienis:
// siunčiant laišką tiksliai 08:00 val
jei current_hour == '08' ir current_minute == '00' ir current_sec == '00':
// iškviečiame funkciją „send_mail“
send_mail (gavėjas_mail, vardas)

Dabar sukuriame „gimtadienio_failą“, kuriame išsaugome vardus, el. Pašto adresus ir jų gimimo datą. Tai paprastas tekstinis failas ir atrodo taip.

Paaiškinimas

Mes perskaitysime šį failą naudodami „python“ scenarijų ir patikrinsime, kieno gimtadienis ateis, ir palinkėsime. Pirmiausia importuosime kai kuriuos modulius. DATETIME modulis turi funkcijas, kurios suteikia mums dabartinę datą ir laiką bei daug daugiau. Bet tai naudosime tik norėdami sužinoti dabartinę datą ir laiką. SMTPLIB modulis naudojamas laiškams siųsti ir buvo paaiškintas aukščiau. RE modulis turi funkcijas, kurios naudojamos ieškant reguliarios išraiškos iš eilutės.

Šiame scenarijuje apibrėžiame funkciją „send_mail“, kuri siunčia laiškus į „reciever_mail_address“, kurio vardas yra „name“. Abu argumentai perduodami funkcijai iš pagrindinio pranešimo pagrindo. Pagrindiniame scenarijaus tekste pamatysime, kaip rasime „reciever_mail_address“ ir „name“.

Laiškų siuntimas naudojant „smtplib“ buvo paaiškintas aukščiau, todėl galite jį perskaityti ir apie tai čia nebus kalbama.

Pagrindiniame tekste einame į katalogą, kuriame išsaugojome „birthday_file“ naudodami „os“.chdir () '. Tada turime „while loop“, kuris visada yra teisingas, todėl jis nuolat tikrins gimtadienį. Dabar gauname dabartinę datą ir laiką ir išsaugome kintamajame „šiandien“. Tai atrodo taip.

2019-11-01 16:19:07.144925 m

Naudodami šių dydžių indeksus, išgausime metus, mėnesį, dieną, valandą, minutes ir sekundes. Po to atidarysime gimtadienio failą objekte „gimtadienio_failas“ skaitymo režimu, todėl galėsime jį perskaityti tik. Dabar visas šio failo eilutes išsaugosime eilučių sąraše. 'gimtadienio_failas.readlines () “išsaugos kiekvieną eilutę sąraše„ eilutės “. Po to mes uždarysime gimtadienio failą naudodami 'gimtadienio_failas.uždaryti () 'funkcija.

Dabar mes perskaitysime kiekvieną eilutę po vieną, naudodami ciklą. Kiekvienoje eilutėje „birthday_file“ yra tik vieno asmens duomenys, todėl šioje cikle vienu metu skaitome tik vieno asmens duomenis.

Po to mes išgausime gimimo datą, el. Pašto adresą ir asmens, naudojančio RE modulį, vardą. Kaip mes parašėme datą tokiu formatu

MMMM-MM-DD

Taigi padarysime reguliarią išraišką „dateEx“, kuri ras šį formatą eilutėje.

re.kompiliuoti (r ”\ d 4 - \ d 2 - \ d 2”)

Virš komandos suraskite eilutę, kurioje yra „4 skaitmenys“, po kurios rašoma „-“, tada „2 skaitmenys“, po kurių rašoma „-“ ir „2 skaitmenys“. Tai suteiks mums asmens gimimo datą, todėl iš šios išraiškos išskirsime gimimo diena ir gimimo mėnuo.

Panašiai rasime el. Pašto adresą naudodami įprastas išraiškas. Po to mes palyginsime gimtadienio_mėnesio ir dabartinio_mėnulio ir gimtadienio_dienos ir dabartinės_ dienos. Jei šios sąlygos bus įvykdytos, mes išsiųsime gimtadienio el. Laišką naudodami „send_mail“ funkciją tiksliai „08: 00“.

Scenarijaus paleidimas automatiškai per „Cronjob“

Dabar mes įsitikinsime, kad šis pitono scenarijus veikia kiekvieną kartą. Norėdami tai padaryti, pridėsime šią užduotį prie „crontab“. „Crontab“, esantis „Linux“, naudojamas automatiškai atlikti užduotis. Ką turime padaryti, tai tiesiog pridėti užduotį prie „crontab“. Norėdami tai padaryti, atlikite nurodytus veiksmus.

  1. Atidarykite „crontab“, kad pridėtumėte užduotį savo terminale naudodami šią komandą
[apsaugotas el. paštas]: ~ $ crontab -e
  1. Šio failo pabaigoje įveskite šią komandą be #
@reboot python path_to_the_script

Aukščiau nurodytos komandos leis jūsų sistemai paleisti „Python“ scenarijų kiekvieną kartą iš naujo paleidus sistemą. Tokiu būdu jūsų sistema paleis python scenarijų kiekvieną kartą, kai jūsų sistema bus įjungta.

Kaip užfiksuoti ir perduoti savo žaidimų sesiją sistemoje „Linux“
Anksčiau žaidimai buvo laikomi tik pomėgiu, tačiau laikui bėgant lošimų pramonė labai augo technologijų ir žaidėjų skaičiaus atžvilgiu. Žaidimų audito...
Geriausi žaidimai, kuriuos reikia žaisti naudojant rankos stebėjimą
„Oculus Quest“ neseniai pristatė puikią rankos stebėjimo be valdiklių idėją. „Oculus Quest“ rankų sekimo žaidimai iki šiol buvo ribojami, kai žaidimų ...
Kaip rodyti OSD perdangą viso ekrano „Linux“ programose ir žaidimuose
Žaisdami viso ekrano žaidimus arba naudodamiesi programomis be išsiblaškymo viso ekrano režimu, galite nutraukti nuo susijusios sistemos informacijos,...