Python

Pošiljanje e-pošte s Pythonom

Pošiljanje e-pošte s Pythonom
Pošiljanje, preverjanje in odgovarjanje na e-pošto je zamudno opravilo, zlasti kadar to počnete za večje število ljudi ali strank, kjer morate le spremeniti ime, naslov, starost in druge malenkosti prejemnika. Za vas bi bila zelo težka naloga, da napišete program, ki bi lahko obdeloval vse vrste vaših osebnih / poslovnih e-poštnih sporočil, vendar lahko kljub temu avtomatizirate veliko stvari, kar vam bo sčasoma prihranilo veliko časa.

Na primer, svojim strankam želite poslati opomnik za preostale račune in vse podatke, povezane s strankami, kot so njihove telefonske številke, naslov, starost itd., Imate v Excelovem listu ali zbirki podatkov, nato pa namesto tega, da to storite ročno, napišete preprost program v Pythonu, ki to samodejno naredi namesto vas. V tej vadnici bomo izvedeli, kako deluje e-poštni protokol in kako lahko postopek avtomatizirate, da prihranite svoj dragoceni čas.

Beseda o SMTP

Simple Mail Transfer Protocol (SMTP) je računalniško enakovreden vaši poštni storitvi. To je protokol, ki deluje na aplikacijski ravni omrežja TCP / IP. To je standardni protokol za pošiljanje in prejemanje e-pošte prek interneta. Postopek prenosa pošte vključuje e-poštni strežniki in odjemalci, ki si medsebojno pošiljajo in prejemajo e-pošto.

Na primer, imate račun GMAIL in želite prijatelju poslati e-poštno sporočilo na njegov račun YAHOO. Napišete e-poštno sporočilo in pritisnete »Pošlji«, vendar je zaledni postopek nekoliko zapleten in za razumevanje tega postopka boste morali najprej razumeti SMTP. Najprej pošlje vaš e-poštni odjemalec SMTP HELO (ali EHLO) na strežnik GMAIL lahko rečete, da je ta ukaz ali glava enakovredna Voditelj glava v protokolu HTTP in se uporablja za identifikacijo strežnika z uporabo domenskega imena. Po HELO ali EHLO se odjemalec s pomočjo uporabniškega imena in gesla potrdi s strežnikom AVTH ukaz. Nato določi e-poštni naslov pošiljatelja in prejemnika ter nato telo sporočila in pošlje e-pošto strežniku GMAIL. Strežnik GMAIL bo najprej potrdil, ali e-poštni naslov prejemnika na YAHOO obstaja ali ne, nato pa bo e-pošto poslal na strežnik YAHOO, kjer lahko prejemnik pridobi svoja e-poštna sporočila iz.

SMTPLIB

SMTPLIB je knjižnica python, ki se lahko uporablja kot odjemalec SMTP, tako kot vaš GMAIL, YAHOO, Thunderbird ali kateri koli drug e-poštni odjemalec, in se lahko uporablja za pošiljanje e-pošte. Z odjemalcem SMTPLIB lahko izvajamo vsa opravila, ki jih lahko opravimo s tistimi, ki imajo grafični uporabniški vmesnik.

Privzeto je na voljo v Pythonu, če ga nimate, ga lahko namestite z naslednjim ukazom.

[zaščiteno po e-pošti]: ~ $ pip namestite smtplib

ALI v Python3

[zaščiteno po e-pošti]: ~ $ pip namestite smtplib

Pisanje prvega e-poštnega sporočila s Pythonom

V tej vadnici bom kot pošiljatelj uporabil račun GMAIL, uporabil bom tudi konzolo Python, zato bom lažje razlagal vsako vrstico kode korak za korakom. Za začetek moramo GMAIL-u omogočiti dostop do manj varnih aplikacij.

Torej, prijavite se v svoj račun GMAIL in nato pojdite na nastavitve računa.

Zdaj se prepričajte, da je dostop za manj varne aplikacije vklopljen.

Zdaj odprite svojo konzolo python in začnite pisati prvo e-pošto s pomočjo Pythona

[e-pošta zaščitena]: ~ $ python
Python 2.7.16 (privzeto, 7. oktober 2019, 17:36:04)
[GCC 8.3.0] na linux2

Za več informacij vnesite »pomoč«, »avtorske pravice«, »dobropisi« ali »licenca«.

// uvoz SMTP knjižnice
>>> uvozi smtplib
// povežemo se s strežnikom GMAIL z imenom domene in številko vrat (Ta nastavitev se razlikuje za
za vsakega ponudnika e-pošte, si oglejte spodnjo tabelo)
>>> mailobj = smtplib.SMTP ('smtp.gmail.com ', 587)
// pozdravi strežnik
>>> mailobj.ehlo ()
(250, 'smtp.gmail.com, ki vam je na voljo, [103.255.4.246] \ nVELIČINA35882577 \ n8BITMIME \ nSTARTTLS \
nENHANCEDSTATUSCODES \ nPIPELINING \ nCHUNKING \ nSMTPUTF8 ')
// Vrata 587 pomenijo, da uporabljamo šifrirano povezavo TLS, zato začnite šifrirano TLS
komunikacijo z uporabo starttls (), tako da se naše poverilnice in sporočila ne povohajo
>>> mailobj.starttls ()
(220, '2.0.0 Pripravljen za zagon TLS ')
// prijavite se v svoj račun GMAIL z uporabo e-pošte in gesla
>>> mailobj.prijava ('[e-pošta zaščitena' ',' s3cr3t_p4ssw0rd ')
(235, '2.7.0 sprejeto ')
// navedite e-poštni naslov pošiljatelja in prejemnika ter vsebino e-pošte
>>> mailobj.sendmail ('[email protected]', '[email protected]', 'Zadeva:
Pozdravljen, svet! \ n Pozdravljeni, svet! to je moje prvo zdravo svetovno e-poštno sporočilo v Pythonu ')

// tesna povezava s strežnikom GMAIL
>>> mailobj.prenehati()
(221, '2.0.0 zapiranje povezave b6sm4519863lfi.72 - gsmtp ')

V zgornjem vzorčnem programu nadomestite dano vsebino s svojo. Če niste uporabnik GMAIL, lahko uporabite e-poštni strežnik svojega ponudnika. Tu je seznam domenskih imen in vrat nekaterih običajnih ponudnikov pošte.

Ime Domen strežniškega imena Pristanišče
Gmail smtp.gmail.com 587
Outlook / Hotmail smtp-pošta.obeti.com 587
YAHOO Mail smtp.pošti.yahoo.com 587
Verizon smtp.verizon.mreža 465
Comcast smtp.comcast.mreža 587

Nekaj ​​besed o IMAP-u

Tako smo pravkar preučili, da se SMTP uporablja za pošiljanje e-pošte, kaj pa je IMAP (Internet Access Messaging Protocol) za? SMTP ni mogoče uporabiti za iskanje in prejemanje e-poštnih sporočil s strežnika, v ta namen se uporablja protokol IMAP ali POP3.

IMAPCLIENT, IMAPLIB in PYZMAIL

V Pythonu obstajata dve glavni knjižnici, ki ju lahko uporabimo kot odjemalca IMAP za iskanje, pridobivanje in brisanje e-poštnih sporočil s poštnega strežnika. Python ima privzeto imaplib knjižnica, ampak druga zunanja knjižnica imapclient je učinkovitejša in enostavnejša za uporabo. V tej vadnici bomo uporabili imapclient za nalaganje e-poštnih sporočil s poštnega strežnika.

Težava z imapclient je, da pridobi e-pošto s poštnega strežnika v surovi obliki. Torej, potrebovali bomo pyzmail knjižnica kot razčlenjevalnik za uporabniku prijazen izhod. Če želite namestiti obe knjižnici, vnesite

[zaščiteno po e-pošti]: ~ $ sudo pip namesti imapclient
[zaščiteno po e-pošti]: ~ $ sudo pip namesti pyzmail

Pridobivanje e-pošte iz poštnega strežnika

Zdaj se bomo naučili, kako poiskati in prenesti e-pošto s poštnega strežnika z uporabo imapclienta. Za iskanje in prenos e-poštnih sporočil s strežnika bomo uporabili imapclient, nato bomo za razčlenitev te surove vsebine uporabili pyzmail. Dajmo

// uvozi knjižnico imapclient
>>> uvozi imapclient
// Povežite se s strežnikom IMA GMAIL
>>> obj = imapclient.IMAPClient ('imap.gmail.com ', ssl = True)
// Prijavite se v svoj e-poštni račun s poverilnicami
>>> obj.prijava ('[e-pošta zaščitena' ',' s3cr4tp4ss ')
'[e-pošta zaščitena] overjena (uspeh)'
// Izberite mapo s sporočili, ki jo želite prebrati i.e INBOX, RASPISI, SENT
>>> obj.select_folder ('INBOX', samo za branje = True)
'OBSTAJA': 830, 'PERMANENTFLAGS': (), 'HIGHESTMODSEQ': 112999, 'UIDNEXT': 931,
'ZASTAVE': ('\\ Odgovorjeno', '\\ Označeno', '\\ Osnutek', '\\ Izbrisano', '\\ Videno',
'$ NotPhishing', '$ Phishing'), 'UIDVALIDITY': 1, 'SAMO ZA BRANJE': ["], 'RECENT': 0
// V sporočilu INBOX poiščite svoja sporočila ali uporabite filter, prikazan bo spodnji filter
ste prejeli pošto po 25. oktobru 2019
>>> mail_ids = obj.iskanje (['SINCE', '25 -Oct-2019 '])
>>> mail_ids
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
// Seznam »mail_ids« vsebuje seznam e-poštnih ID-jev, prejetih od 25. oktobra 2019,
lahko prenesete e-pošto s funkcijo imapclient fetch.
>>> raw_mail = obj.prinesi ([919], ['TELO []', 'ZASTAVE'])
// Vsebina v spremenljivki raw_mail je v surovi obliki in je ni mogoče prikazati na
zaslon neposredno, zato bi rabil razčlenjevalnik za razčlenitev te vsebine za uporabniku prijazen izhod
>>> uvozi pyzmail
>>> sporočilo = pyzmail.PyzMessage.tovarna (raw_mail [919] ['TELO []'])
// Zdaj je e-pošta razčlenjena in shranjena v spremenljivki sporočila, da dobimo zadevo
e-pošto uporabite funkcijo get_subject
>>> sporočilo.get_subject ()
u'Obleči svoje spretnosti to noč čarovnic s 25% popusta '
// Podobno lahko vidite podrobnosti pošiljatelja
>>> sporočilo.get_addresses ('from')
[(u'Usama Azad ',' [email protected] ')]
>>> sporočilo.get_addresses ('to')
[(u '[email protected]', '[email protected]')]
// Če želite dobiti telo e-poštnega sporočila, vnesite
>>> sporočilo.del besedila.get_payload ().decode (sporočilo.del besedila.nabor znakov)
u "Živjo! Uživajte v pavšalnih 25% na naših premium tečajih "

Če imate račun pri drugem ponudniku e-poštnih storitev, ki ni GMAIL, se lahko prijavite na njihov strežnik IMAP. Tu je seznam imen domen IMAP nekaterih znanih ponudnikov pošte.

Ponudnik Domen za strežnik IMAP
YAHOO imap.pošti.yahoo.com
Hotmail / Outlook imap-pošta.obeti.com
Verizon dohodni.verizon.mreža
Comcast imap.comcast.mreža
AT&T imap.pošti.att.mreža

Brisanje e-pošte s strežnika IMAP

Podobno kot pri iskanju in pridobivanju e-poštnih sporočil s strežnika lahko tudi e-pošto s svojega poštnega strežnika izbrišete z uporabo njihovega uida. Samo sledite danim korakom

// Če želite izbrisati e-poštno sporočilo, morate za branje dostopati do možnosti »False«
e-poštna sporočila
>>> obj.select_folder ('INBOX', samo za branje = False)
>>> mail_ids = obj.iskanje (['SINCE', '25 -Oct-2019 '])
>>> mail_ids
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
 
// Navedite e-poštni uid ali seznam e-poštnih uidov po zagonu pod ukazom,
vaš e-poštni naslov bo izginil iz INBOX-a.
>>> obj.delete_messages (919)
919: ('\\ Videli', '\\ izbrisali')
 
// Ta ukaz bo trajno izbrisal vaša e-poštna sporočila iz poštnega strežnika
>>> obj.odstraniti ()
('Uspeh', [])

https: // techtopz.com / build-a-birthday-opomnik-aplikacija-v-python-on-mac /

Sestavite si opomnik za rojstni dan

V prihodnjih mesecih imate rojstne dneve svojih prijateljev in jim želite zaželeti njihove rojstne dneve. Toda v svoji pisarni imate veliko dela in obstaja možnost, da jih boste pozabili zaželeti. Torej je to nalogo mogoče samodejno izvesti s pomočjo pythona. Sledi koda za izvajanje te naloge.

// uvoz modulov
uvozi ponovno
// os modul se uporablja za izvajanje nalog operacijskega sistema i.e dostop do direktorij
uvoz os
uvozi datum in čas
uvozi smtplib
 
// definiranje funkcije, ki bo pošiljala e-pošto
def send_mail (prejemnik_naslova_address, ime):
sender_mail_address = "[e-pošta zaščitena]"
passwd = "senderPasswd"
// povezovanje z gmail strežnikom z imenom domene in številko vrat
obj = smtplib.SMTP ('smtp.gmail.com ', 587)
obj.ehlo ()
obj.starttls ()
// prijava v svoj gmail račun
obj.prijava (sender_mail_address, passwd)
// pošiljanje pošte na naslov 'reciever_mail_address'.
obj.sendmail (sender_mail_address, reciever_mail_address, "Subject: BirthDay Wishing Mail \ n \ n HappyBirthday" + ime)
// končna povezava
obj.prenehati()
// Glavni del
// odhod v imenik, v katerem je datoteka, ki vsebuje podatke
os.chdir ("datoteka_datoteke_podatkov_dnevne_dnevnice")
medtem ko 1:
// pridobivanje datuma in ure sedanjega trenutka
danes = datum in čas.Datum čas.danes ()
danes = str (danes)
// pridobivanje tekočega leta, meseca, dneva, ure, minute in sekunde
trenutno_ leto = danes [0: 4]
current_month = danes [5: 7]
current_day = danes [8:10]
current_hour = danes [11:13]
current_minute = danes [14:16]
current_sec = danes [17:19]
// odpiranje datoteke rojstnega dne v objektu 'birthday_file' v načinu branja
birthday_file = odprto ('datoteka_dnevne_druge', 'r')
// shranjevanje vseh vrstic datoteke 'birthday_file' na seznam vrstic
vrstice = rojstnodnevna datoteka.bralne vrstice ()
// zapiranje predmeta 'birthday_file'
datoteka_rojstnega dne.zapri ()
// branje vsake vrstice z uporabo zanke for
za vrstico v vrsticah:
// izdelava regularnega izraza za iskanje datuma v datoteki 'birthday_file'
dateEx = re.sestavi (r "\ d 4 - \ d 2 - \ d 2")
findDate = dateEx.iskanje (vrstica)
date = findDate.skupina ()
// pridobivanje rojstnega_meseca in rojstnega dne iz datoteke
birthday_month = datum [5: 7]
birthday_day = datum [8:10]
// izdelava regularnega izraza za iskanje poštnega naslova iz datoteke_dnevne_datoteke
mailEx = re.prevedite (r "\ w * @ \ w *.com ")
findMail = mailEx.iskanje (vrstica)
reciever_mail = findMail.skupina ()
// izdelava regularnega izraza za iskanje imena osebe
nameEx = re.sestavi (r "\ w *")
findName = nameEx.iskanje (vrstica)
name = findName.skupina ()
// preverjanje, ali prihaja rojstni dan nekoga ali ne
če je trenutni_mesec == rojstni_mesec in = trenutni_dan == rojstni_dan:
// pošiljanje pošte točno ob 08:00
če je current_hour == '08' in current_minute == '00' in current_sec == '00':
// klicanje funkcije 'send_mail'
send_mail (reciever_mail, ime)

Zdaj naredimo datoteko 'birthday_file', v katero shranimo imena, e-poštne naslove in njihov datum rojstva. To je preprosta besedilna datoteka in izgleda tako.

Pojasnilo

To datoteko bomo prebrali s pomočjo skripta python, preverili, čigav rojstni dan prihaja in jim zaželeli. Najprej bomo uvozili nekaj modulov. DATETIME Modul ima funkcije, ki nam dajo trenutni datum in uro in še veliko več. Toda to bomo uporabili samo za iskanje trenutnega datuma in ure. Modul SMTPLIB se uporablja za pošiljanje pošte in je bil razložen zgoraj. RE modul ima funkcije, ki se uporabljajo za iskanje regularnega izraza iz niza.

V tem skriptu definiramo funkcijo 'send_mail', ki pošlje pošto na 'reciever_mail_address', katere ime je 'name'. Oba argumenta se funkciji posredujeta iz glavnega dela sporočila. V glavnem delu skripta bomo videli, kako najdemo "reciever_mail_address" in "name".

Pošiljanje e-pošte z uporabo smtplib je razloženo zgoraj, zato ga lahko preberete in tukaj ne bo razpravljano.

V glavnem delu gremo v mapo, v katero smo shranili datoteko 'birthday_file' z uporabo 'os.chdir () '. Nato imamo 'while zanko', ki je vedno resnična, zato bo neprekinjeno preverjala rojstni dan. Zdaj dobimo trenutni datum in čas ter ga shranimo v spremenljivko 'danes'. Izgleda takole.

2019-11-01 16:19:07.144925

Z indeksi teh količin bomo izločili leto, mesec, dan, uro, minute in sekunde. Po tem bomo datoteko birthday_file odprli v predmetu 'birthday_file' v načinu branja, tako da jo lahko samo beremo. Zdaj bomo vse vrstice te datoteke shranili na seznam vrstic. 'rojstna_datoteka.readlines () 'bo vsako vrstico shranil na seznam' vrstic '. Po tem bomo zaprli datoteko birthday_file z uporabo datoteke 'birthday_file.funkcija close () '.

Zdaj bomo vsako vrstico prebrali eno za drugo z uporabo zanke for. V vsaki vrstici so v datoteki 'birthday_file' na voljo samo podatki ene osebe, zato v tej zanki hkrati beremo podatke samo ene osebe.

Po tem bomo z uporabo modula RE izpisali datum rojstva, e-poštni naslov in ime osebe. Kot smo zapisali datum v naslednji obliki

LLLL-MM-DD

Tako bomo naredili regularni izraz 'dateEx', ki bo našel to obliko v vrstici.

ponovno.sestavi (r "\ d 4 - \ d 2 - \ d 2")

Nad ukazom poiščite niz, ki ima '4 števke', čemur sledi '-', nato '2 števki', ki ji sledi '-' in '2 številki'. S tem bomo dobili datum rojstva osebe, zato bomo iz tega izraza izvlekli rojstni dan in rojstni mesec.

Podobno bomo našli e-poštni naslov z uporabo regularnih izrazov. Po tem bomo primerjali rojstni_mesec in trenutni_mesec ter rojstni dan_ in trenutni_dan. Če so ti pogoji izpolnjeni, bomo rojstni dan poslali s pomočjo funkcije 'send_mail' natančno '08: 00 '.

Samodejni zagon Scripta prek Cronjoba

Zdaj bomo poskrbeli, da se bo ta skript python vsakič zagnal. Če želite to narediti, bomo to nalogo dodali v crontab. Crontab v Linuxu se uporablja za samodejno izvajanje nalog. Kar moramo storiti, je samo dodati nalogo v crontab. Če želite to narediti, sledite navodilom.

  1. Odprite crontab, če želite dodati nalogo v terminal s pomočjo naslednjega ukaza
[e-pošta zaščitena]: ~ $ crontab -e
  1. Na koncu te datoteke vnesite naslednji ukaz brez #
@reboot python path_to_the_script

Zgornji ukazi bodo vašemu sistemu omogočili zagon skripta python vsakič, ko znova zaženete sistem. Na ta način bo vaš sistem zagnal skript python vsakič, ko bo sistem vklopljen.

S pomočjo gumba X-Mouse Button Control različno prilagodite gumbe miške za različno programsko opremo
Mogoče potrebujete orodje, ki bi lahko spremenilo nadzor miške z vsako aplikacijo, ki jo uporabljate. V tem primeru lahko preizkusite aplikacijo z ime...
Microsoft Sculpt Touch Wireless Mouse Review
Pred kratkim sem prebral o Microsoftov kiparski dotik brezžično miško in se odločil za nakup. Potem ko sem ga nekaj časa uporabljal, sem se odločil, d...
Zaslonska sledilna ploščica in kazalec miške AppyMouse za tablične računalnike Windows
Uporabniki tabličnih računalnikov pogosto zgrešijo miškin kazalec, še posebej kadar običajno uporabljajo prenosne računalnike. Pametni telefoni in tab...