Python

E-kirjade saatmine Pythoniga

E-kirjade saatmine Pythoniga
E-kirjade saatmine, kontrollimine ja neile vastamine on aeganõudev ülesanne, eriti kui teete seda paljudele inimestele või klientidele, kus peate lihtsalt muutma saaja nime, aadressi, vanust ja muid väikeseid asju. Teie jaoks oleks väga keeruline ülesanne kirjutada programm, mis suudaks hallata igat tüüpi teie isiklikke / ärilisi e-kirju, kuid sellegipoolest saate sellega seoses palju asju automatiseerida, mis säästab lõpuks palju aega.

Näiteks soovite saata oma klientidele meeldetuletuse nende järelejäänud arvete kohta ja teil on kõik kliendiga seotud andmed, näiteks nende telefoninumbrid, aadress, vanus jne, Exceli lehel või andmebaasis, siis saate käsitsi tegemise asemel kirjutada Pythonis lihtne programm, et seda teie jaoks automaatselt teha. Selles õpetuses õpime, kuidas meiliprotokoll töötab ja kuidas saate oma väärtusliku aja säästmiseks protsessi automatiseerida.

Mõni sõna SMTP-st

SMTP (Simple Mail Transfer Protocol) on teie postiteenuse arvutipõhine ekvivalent. See on protokoll, mis töötab TCP / IP-võrgu rakenduskihil. Selle standardprotokoll e-kirjade saatmiseks ja vastuvõtmiseks Interneti kaudu. Mail Transfer protsess koosneb e-posti serveritest ja klientidest, kes saadavad ja saavad üksteisele e-kirju.

Näiteks on teil GMAIL-i konto ja soovite oma sõbrale saata YAHOO-kontole meilisõnumi. Kirjutate e-kirja ja vajutate saatmist, kuid taustaprotsess on veidi keeruline ja selle protsessi mõistmiseks peate kõigepealt mõistma SMTP-d. Esmalt saadab teie SMTP e-posti klient HELO (või EHLO) GMAIL-i serverisse, võite öelda, et see käsk või päis on samaväärne Peremees päis HTTP-protokollis ja seda kasutatakse serveri tuvastamiseks domeeninime abil. Pärast HELO või EHLO autentimist klient autentib ennast serverisse antud kasutajanime ja parooliga, kasutades AUTH käsk. Seejärel määrab see saatja ja saaja e-posti aadressi ning seejärel sõnumi sisu ja saadab e-posti GMAIL-i serverisse. GMAIL-i server kinnitab kõigepealt, kas saaja e-posti aadress YAHOO-s on olemas või mitte, siis saadab ta selle YAHOO-serverile, kust saaja saab oma e-kirju hankida.

SMTPLIB

SMTPLIB on pythoni teek, mida saab kasutada SMTP-kliendina nagu teie GMAIL, YAHOO, Thunderbird või mõni muu e-posti klient ja seda saab kasutada meilide saatmiseks. SMTPLIB-kliendi abil saame täita kõiki ülesandeid, mida saame teha nendega, kellel on graafiline kasutajaliides.

Vaikimisi tuleb see Pythonis, kui teil seda pole, saate installida järgmise käsu abil.

[meiliga kaitstud]: ~ $ pip install smtplib

VÕI Pythonis3

[meiliga kaitstud]: ~ $ pip install smtplib

Esimese e-posti kirjutamine Pythoniga

Selles õpetuses kasutan saatjana GMAIL-i kontot, samuti kasutan Pythoni konsooli, nii et mul on lihtsam iga koodirida samm-sammult selgitada. Alustamiseks peame lubama meie GMAIL-il juurdepääsu vähem turvalistele rakendustele.

Seega logige sisse oma GMAIL-i kontole ja minge seejärel konto seadetesse.

Nüüd veenduge, et vähem turvaliste rakenduste juurdepääs oleks sisse lülitatud.

Nüüd avage oma pythoni konsool ja alustage Pythoni abil oma esimese meilisõnumi kirjutamist

[meiliga kaitstud]: ~ $ python
Python 2.7.16 (vaikimisi, 7. oktoober 2019, 17:36:04)
[GCC 8.3.0] veebisaidil linux2

Lisateabe saamiseks sisestage „help“, „copyright“, „credits“ või „litsents“.

// importige SMTP teek
>>> importige smtplib
// ühenduse loomine GMAIL-i serveriga domeeninime ja pordinumbriga (see säte erineb
(vaadake palun allpool toodud tabelit)
>>> mailobj = smtplib.SMTP ('smtp.gmail.com ", 587)
// tere serverile
>>> mailobj.ehlo ()
(250, 'smtp.gmail.com teie teenistuses, [103.255.4.246] \ nSIZE35882577 \ n8BITMIME \ nSTARTTLS \
nENHANCEDSTATUSCODES \ nPIPELINING \ nCHUNKING \ nSMTPUTF8 ')
// Port 587 tähendab, et kasutame krüptitud TLS-ühendust, seega alustage krüptitud TLS-i
suhtlus starttls () abil, et meie mandaate ja sõnumeid ei nuusutataks
>>> mailobj.starttls ()
(220, '2.0.0 TLS-i käivitamiseks valmis ')
// logige sisse oma GMAIL-i kontole, kasutades e-posti ja parooli
>>> mailobj.login ('[e-posti aadressiga kaitstud]', 's3cr3t_p4ssw0rd')
(235, '2.7.0 aktsepteeritud ')
// määrake saatja ja saaja e-posti aadress ja e-posti sisu
>>> mailobj.sendmail ('[email protected]', '[email protected]', 'Teema:
Tere, Maailm! \ n Tere maailm! see on minu esimene tere maailma e-posti aadress Pythonis ')

// sulgege ühendus GMAIL-serveriga
>>> mailobj.lõpetage ()
(221, '2.0.0 sulgev ühendus b6sm4519863lfi.72 - gsmtp ')

Asendage ülaltoodud näidisprogrammis antud sisu enda omaga. Kui te ei ole GMAIL-i kasutaja, saate kasutada oma teenusepakkuja e-posti serverit. Siin on loetelu mõnede levinud e-posti pakkujate domeeninimedest ja sadamatest.

Nimi Serveri domeeninimi Sadam
Gmail smtp.gmail.com 587
Outlook / Hotmail smtp-mail.väljavaade.com 587
YAHOO Mail smtp.mail.yahoo.com 587
Verizon smtp.verizon.võrk 465
Comcast smtp.comcast.võrk 587

Mõned sõnad IMAP-i kohta

Nii me just uurisime, et meilide saatmiseks kasutatakse SMTP-d, kuid milleks on mõeldud IMAP-i (Internet Access Messaging Protocol)? SMTP-d ei saa kasutada serverist meilide otsimiseks ja hankimiseks, selleks kasutatakse IMAP- või POP3-protokolli.

IMAPCLIENT, IMAPLIB ja PYZMAIL

Pythonis on kaks suurt teeki, mida saab kasutada IMAP-kliendina e-posti otsimiseks, hankimiseks ja kustutamiseks. Pythonil on vaikimisi imaplib vaid teine ​​väline raamatukogu kohatu on tõhusam ja hõlpsam kasutada. Selles õpetuses me kasutame kohatu e-kirjade hankimiseks meiliserverist.

Probleem kohatu on see, et see otsib e-posti serveris olevad kirjad toores vormingus. Nii et me vajame pyzmail raamatukogu kasutajasõbraliku väljundi parserina. Mõlema teegi installimiseks tippige

[meiliga kaitstud]: ~ $ sudo pip install imapclient
[meiliga kaitstud]: ~ $ sudo pip install pyzmail

Teie e-kirjade hankimine meiliserverist

Nüüd õpime, kuidas meiliserverist e-posti otsida ja alla laadida, kasutades imapclienti. Kasutame serverist meilide otsimiseks ja allalaadimiseks rakendust imapclient, seejärel kasutame selle toorsisu sõelumiseks pyzmaili. Lähme

// imapclient teegi import
>>> imapclient import
// Ühendage GMAIL-i IMAP-serveriga
>>> obj = kohatu.IMAPClient ('imap.gmail.com ', ssl = True)
// Logige sisse oma e-posti kontole, kasutades oma volitusi
>>> obj.sisselogimine ('[email email protected]', 's3cr4tp4ss')
'[meiliga kaitstud] autentitud (õnnestus)'
// Valige lugemiseks sõnumikaust i.e KAST, JOONISED, SAADETUD kirjad
>>> obj.select_folder ('INBOX', kirjutuskaitstud = True)
'OLEMAS ": 830,' PÜSIVAD LIPUD ': (),' HIGHESTMODSEQ ': 112999,' UIDNEXT ': 931,
'LIPUD': ('\\ Vastatud', '\\ Märgitud', 'Mustand', 'Kustutatud', 'Nähtud',
'$ NotPhishing', '$ Phishing'), 'UIDVALIDITY': 1, 'AINULT LUGEMINE': ["], 'VIIMASE': 0
// Otsige oma kirju oma postkastis või rakendage filtrit, kuvatakse allpool olev filter
teile pärast 25. oktoobrit 2019 saadud kirjad
>>> mail_ids = obj.otsing (['SINCE', '25 -Oct-2019 '])
>>> mail_id
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
// Loend „mail_id” sisaldab loendit e-posti ID-dest, mis on saadud alates 25. oktoobrist 2019,
saate meilisõnumi alla laadida, kasutades funktsiooni imapclient fetch.
>>> raw_mail = obj.tooma ([919], ['BODY []', 'FLAGS'])
// Nüüd on muutuja raw_mail sisu toores vormingus ja seda ei saa sellel kuvada
otse ekraanil. Seega vajame selle sisu parsimiseks kasutajasõbraliku väljundi jaoks parserit
>>> impordi pyzmail
>>> sõnum = pyzmail.PyzMessage.tehas (raw_mail [919] ['BODY []'])
// Nüüd on e-post sõelutud ja salvestatud sõnumi muutujasse, et saada selle teema
kasutage funktsiooni get_subject
>>> sõnum.get_subject ()
u "Pange oma Halloweeni oskused 25% allahindlusega"
// Samamoodi näete saatja üksikasju
>>> sõnum.get_addresses ('pärit')
[(u'Usama Azad ',' [meiliga kaitstud] ')]
>>> sõnum.get_addresses ('kuni')
[(u '[meiliga kaitstud]', '[meiliga kaitstud]']]
// E-kirja sisu saamiseks tippige
>>> sõnum.text_part.get_payload ().dekodeeri (sõnum.text_part.tähemärk)
u ”Tere! Nautige tasulisi 25% meie lisakursustel ”

Kui teil on konto mõnes muus e-posti teenuse pakkujas, välja arvatud GMAIL, saate sisse logida nende IMAP-serverisse. Siin on mõne kuulsa postiteenuse pakkuja IMAP-i domeeninimede loend.

Pakkuja IMAP-serveri domeeninimi
Jah imap.mail.yahoo.com
Hotmail / Outlook imap-mail.väljavaade.com
Verizon sissetulevad.verizon.võrk
Comcast imap.comcast.võrk
AT&T imap.mail.att.võrk

E-posti kustutamine IMAP-serverist

Sarnaselt serverist e-kirjade otsimisele ja toomisele saate ka e-kirjad oma e-posti serverist nende uid abil kustutada. Järgige lihtsalt antud samme

// E-kirja kustutamiseks peate oma kirjutamisõiguse saamiseks muutma lugemisvaliku valeks
e-kirjad
>>> obj.select_folder ('INBOX', kirjutuskaitstud = vale)
>>> mail_id = obj.otsing (['SINCE', '25 -Oct-2019 '])
>>> mail_id
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
 
// Pärast käsu all käivitamist esitage e-posti aadressi või e-posti aadressi loendi,
teie e-kiri kaob teenusest INBOX.
>>> obj.kustuta_sõnumid (919)
919: ('\\ Nähtud', '\\ Kustutatud')
 
// See käsk kustutab teie meilid jäädavalt meiliserverist
>>> obj.välja viskama ()
('Edu', [])

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

Oma sünnipäeva meeldetuletuse koostamine

Teil on lähikuudel oma sõprade sünnipäevad ja soovite neile sünnipäevaks soovida. Kuid teie kontoris on palju tööd ja on võimalus, et unustate neile soovida. Nii saab seda ülesannet pythoni abil automaatselt täita. Järgmine on kood selle ülesande täitmiseks.

// moodulite importimine
impordi re
// os-moodulit kasutatakse operatsioonisüsteemi ülesannete täitmiseks i.e juurdepääs direkotidele
impordi os
impordi kuupäev
import smtplib
 
// funktsiooni määratlemine, mis saadab e-kirju
def send_mail (vastuvõtja_maili_adress, nimi):
sender_mail_address = "[meiliga kaitstud]"
passwd = "senderPasswd"
// ühenduse loomine gmaili serveriga domeeninime ja pordinumbriga
obj = smtplib.SMTP ('smtp.gmail.com ", 587)
obj.ehlo ()
obj.starttls ()
// oma gmaili kontole sisse logimine
obj.sisselogimine (saatja_posti_aadress, parool)
// kirja saatmine aadressile 'reciever_mail_address'.
obj.sendmail (sender_mail_address, reciever_mail_address, "Subject: Sünnipäeva sooviv kiri \ n \ n HappyBirthday" + nimi)
// ühenduse lõpetamine
obj.lõpetage ()
// Põhikeha
// läheb kataloogi, kus on andmeid sisaldav fail
os.chdir ("tee_sünnipäeva_andmete_fail")
samas 1:
// praeguse hetke kuupäeva ja kellaaja saamine
täna = kuupäevaeg.kuupäev Kellaaeg.täna ()
täna = str (täna)
// jooksva aasta, kuu, päeva, tunni, minuti ja sekundi saamine
praegune_aasta = täna [0: 4]
praegune_kuu = täna [5: 7]
praegune_päev = täna [8:10]
current_hour = täna [11:13]
current_minute = täna [14:16]
current_sec = täna [17:19]
// sünnipäevafaili avamine objektis 'birthday_file' lugemisrežiimis
birthday_file = avatud ('birthday_file', 'r')
// kõigi sünnipäeva_faili ridade salvestamine ridade loendisse
read = sünnipäeva_fail.readlines ()
// objekti 'birthday_file' sulgemine
sünnipäeva_fail.Sulge()
// iga rea ​​lugemine loopi jaoks
joontega joonteks:
// regulaaravaldise tegemine kuupäeva leidmiseks jaotises 'birthday_file'
dateEx = re.kompileeri (r "\ d 4 - \ d 2 - \ d 2")
findDate = dateEx.otsing (rida)
kuupäev = leidkuupäev.Grupp()
// sünnipäeva_kuu ja sünnipäeva saamine failist
sünnipäeva_kuu = kuupäev [5: 7]
sünnipäeva_päev = kuupäev [8:10]
// regulaaravaldise tegemine sünnipäeva faili meiliaadressi leidmiseks
mailEx = re.kompileerima (r "\ w * @ \ w *.com ")
findMail = mailEx.otsing (rida)
reciever_mail = findMail.Grupp()
// inimese nime leidmiseks regulaaravaldise tegemine
nameEx = re.kompileerima (r "\ w *")
findName = nimiEx.otsing (rida)
nimi = leidnimi.Grupp()
// kontrollimine, kas kellegi sünnipäev on tulemas või mitte
kui praegune_kuu == sünnipäeva_kuupäev ja = praegune_päev == sünnipäeva_päev:
// posti saatmine täpselt kell 08:00
kui current_hour == '08' ja current_minute == '00' ja current_sec == '00':
// funktsiooni 'send_mail' kutsumine
send_mail (vastuvõtja_mail, nimi)

Nüüd koostame 'birthday_file', kuhu salvestame nimed, e-posti aadressid ja nende sünnikuupäev. See on lihtne tekstifail ja näeb välja selline.

Selgitus

Me loeme seda faili pythoni skripti abil ja kontrollime, kelle sünnipäev on tulemas, ja soovime neile. Kõigepealt impordime mõned moodulid. DATETIME moodulil on funktsioonid, mis annavad meile praeguse kuupäeva ja kellaaja ning palju muud. Kuid me kasutame seda ainult praeguse kuupäeva ja kellaaja leidmiseks. SMTPLIB moodulit kasutatakse kirjade saatmiseks ja seda on eespool selgitatud. RE moodulil on funktsioonid, mida kasutatakse stringist regulaaravaldise leidmiseks.

Selles skriptis määratleme funktsiooni "send_mail", mis saadab kirjad aadressile "reciever_mail_address", mille nimi on "name". Mõlemad argumendid edastatakse funktsioonile msg põhiosast. Skripti põhiosas näeme, kuidas leiame 'reciever_mail_address' ja 'name'.

E-kirjade saatmine smtplibi abil on eespool selgitatud, nii et saate seda lugeda ja seda ei käsitleta siin.

Liikume põhiosas kataloogi, kuhu oleme 'os_ abil faili' birthday_file 'salvestanud.chdir () '. Siis on meil olemas "loop", mis on alati tõsi, nii et see kontrollib sünnipäeva pidevalt. Nüüd saame praeguse kuupäeva ja kellaaja ning salvestame selle muutujasse 'today'. See näeb välja selline.

2019-11-01 16:19:07.144925

Nende koguste indeksite abil eraldame aasta, kuu, päeva, tunni, minuti ja sekundi. Pärast seda avame sünnipäeva fail failis sünnipäeva fail faili lugemisrežiimis, nii et me saame seda ainult lugeda. Nüüd salvestame selle faili kõik read ridade loendisse. 'sünnipäeva_fail.readlines () 'salvestab iga rea' read 'loendisse. Pärast seda sulgeme sünnipäeva_fail, kasutades 'sünnipäeva fail.close () 'funktsioon.

Nüüd loeme iga rida ükshaaval silmuseks. Igas reas on jaotises 'birthday_file' saadaval ainult ühe inimese andmed, seega loeme selles tsüklis korraga ainult ühe inimese andmeid.

Pärast seda eraldame RE-moodulit kasutades sünnikuupäeva, e-posti aadressi ja isiku nime. Nagu oleme kuupäeva kirjutanud järgmises vormingus

AAAA-KK-PP

Seega teeme regulaaravaldise 'dateEx', mis leiab selle vormingu reast.

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

Leidke käsu kohal string, millel on '4 numbrit', millele järgneb '-', seejärel '2 numbrit', millele järgnevad '-' ja '2 numbrit'. See annab meile inimese sünnikuupäeva, nii et me võtame sellest väljendist välja sünniaeg ja -kuu.

Samamoodi leiame e-posti aadressi regulaaravaldiste abil. Pärast seda võrdleme sünnipäeva ja praeguse kuu ning sünnipäeva ja praeguse päeva vahel. Kui need tingimused on täidetud, saadame sünnipäeva meili, kasutades funktsiooni 'send_mail' täpselt '08: 00 '.

Skripti käitamine automaatselt Cronjobi kaudu

Nüüd veendume, et see pythoni skript töötab iga kord. Selleks lisame selle ülesande crontabile. Linuxi Crontabi kasutatakse ülesannete automaatseks täitmiseks. Peame lihtsalt lisama ülesande crontabile. Selleks järgige antud samme.

  1. Avage crontab, et lisada terminali ülesanne järgmise käsu abil
[meiliga kaitstud]: ~ $ crontab -e
  1. Selle faili lõppu sisestage järgmine käsk ilma #
@reboot python path_to_the_script

Ülalolevad käsud võimaldavad teie süsteemil käitada pythoni skripti iga kord, kui taaskäivitate süsteemi. Nii käivitab teie süsteem pythoni skripti iga kord, kui teie süsteem on sisse lülitatud.

Kuidas muuta hiire ja puuteplaatide kerimise suund Windows 10-s ümber
Hiir ja PuuteplaatNeed muudavad arvutamise mitte ainult lihtsaks, vaid ka tõhusamaks ja vähem aeganõudvaks. Me ei kujuta ette elu ilma nende seadmetet...
Kuidas muuta hiirekursori ja kursori suurust, värvi ja skeemi Windows 10-s
Windows 10 hiirekursor ja kursor on operatsioonisüsteemi väga olulised aspektid. Seda võib öelda ka teiste opsüsteemide kohta, nii et tegelikult pole ...
Tasuta ja avatud lähtekoodiga mängumootorid Linuxi mängude arendamiseks
See artikkel hõlmab loetelu tasuta ja avatud lähtekoodiga mängumootoritest, mida saab kasutada 2D- ja 3D-mängude arendamiseks Linuxis. Selliseid mängu...