Piton

Slanje e-pošte s Pythonom

Slanje e-pošte s Pythonom
Slanje, provjeravanje i odgovaranje na e-poštu dugotrajan je zadatak, pogotovo kada to radite za velik broj ljudi ili kupaca gdje samo morate promijeniti ime, adresu, dob i druge primateljeve primatelje. Za vas bi bio vrlo težak zadatak da napišete program koji bi mogao obrađivati ​​sve vrste vaših osobnih / poslovnih e-adresa, ali svejedno možete automatizirati puno stvari u tom pogledu što će vam na kraju uštedjeti puno vremena.

Na primjer, želite poslati podsjetnik svojim kupcima za preostale račune, a sve podatke povezane s kupcima, poput njihovih telefonskih brojeva, adrese, starosti itd., Imate u excel listu ili u bazi podataka, a umjesto da to radite ručno, možete napisati jednostavan program u Pythonu koji to automatski radi za vas. U ovom uputstvu naučit ćemo kako funkcionira protokol e-pošte i kako možete automatizirati postupak kako biste uštedjeli svoje dragocjeno vrijeme.

Riječ o SMTP-u

Jednostavni protokol za prijenos pošte (SMTP) računarski je ekvivalent vaše poštanske usluge. To je protokol koji radi na aplikacijskom sloju TCP / IP mreže. To je standardni protokol za slanje i primanje e-pošte putem Interneta. Proces prijenosa pošte sastoji se od poslužitelja e-pošte i klijenata koji međusobno šalju i primaju e-poštu.

Na primjer, imate GMAIL račun i želite poslati e-poštu svom prijatelju na njegov YAHOO račun. Napišete e-poštu i pritisnete send, ali pozadinski postupak je malo kompliciran i da biste razumjeli taj postupak, prvo ćete morati razumjeti SMTP. Vaš SMTP klijent e-pošte prvo šalje ZDRAVO (ili EHLO) na GMAIL poslužitelj, možete reći da je ova naredba ili zaglavlje ekvivalentno Domaćin zaglavlje u HTTP protokolu i koristi se za identifikaciju poslužitelja pomoću imena domene. Nakon HELO ili EHLO, klijent se autentificira na poslužitelju s danim korisničkim imenom i lozinkom AUTH naredba. Zatim navodi e-adresu pošiljatelja i primatelja, a zatim tijelo poruke i šalje e-poštu na GMAIL poslužitelj. GMAIL poslužitelj prvo će potvrditi postoji li adresa e-pošte primatelja na YAHOO-u ili ne, a zatim će poslati e-poštu na YAHOO poslužitelj odakle primatelj može preuzeti svoje e-adrese s.

SMTPLIB

SMTPLIB je python biblioteka koja se može koristiti kao SMTP klijent baš kao i vaš GMAIL, YAHOO, Thunderbird ili bilo koji drugi klijent e-pošte i može se koristiti za slanje e-pošte. Sve zadatke možemo izvoditi pomoću SMTPLIB klijenta koje možemo raditi s onima koji imaju grafičko korisničko sučelje.

Dolazi prema zadanim postavkama u Pythonu, ako ga nemate, možete ga instalirati pomoću sljedeće naredbe.

[zaštićena e-poštom]: ~ $ pip install smtplib

ILI u Python3

[e-pošta zaštićena]: ~ $ pip instalirati smtplib

Pisanje prve e-pošte s Pythonom

U ovom uputstvu koristit ću GMAIL račun kao pošiljatelja, a koristit ću i Python konzolu, pa će mi biti lakše objasniti svaki redak koda korak po korak. Za početak moramo GMAIL-u omogućiti pristup manje sigurnim aplikacijama.

Dakle, prijavite se na svoj GMAIL račun, a zatim idite na postavke računa.

Sada provjerite je li uključen pristup za manje sigurne aplikacije.

Sada otvorite svoju python konzolu i počnite pisati svoju prvu e-poštu pomoću Pythona

[e-pošta zaštićena]: ~ $ python
Python 2.7.16 (zadano, 7. listopada 2019., 17:36:04)
[OUU 8.3.0] na linux2

Upišite "pomoć", "autorska prava", "krediti" ili "licenca" za više informacija.

// uvoz SMTP knjižnice
>>> uvoz smtplib
// povezivanje s GMAIL poslužiteljem s imenom domene i brojem porta (Ova postavka razlikuje se za
svakog davatelja usluga e-pošte, pogledajte donju tablicu)
>>> mailobj = smtplib.SMTP ('smtp.gmail.com ', 587)
// pozdravi poslužitelj
>>> mailobj.ehlo ()
(250, 'smtp.gmail.com vama na usluzi, [103.255.4.246] \ nVELIČINA35882577 \ n8BITMIME \ nSTARTTLS \
nENHANCEDSTATUSCODES \ nPIPELINING \ nCHUNKING \ nSMTPUTF8 ')
// Port 587 znači da koristimo šifriranu TLS vezu, pa pokrenite šifrirani TLS
komunikaciju pomoću starttls (), tako da se naše vjerodajnice i poruke ne njuše
>>> mailobj.starttls ()
(220, '2.0.0 Spremno za pokretanje TLS-a ')
// prijavite se na svoj GMAIL račun koristeći e-poštu i lozinku
>>> mailobj.prijava ('[zaštićena e-poštom]', 's3cr3t_p4ssw0rd')
(235, '2.7.0 Prihvaćeno ')
// navedite e-adresu pošiljatelja i primatelja i sadržaj e-pošte
>>> mailobj.sendmail ('[e-mail zaštićen]', '[zaštićen e-poštom]', 'Predmet:
Pozdrav svijete! \ n Pozdrav svijetu! ovo je moja prva svjetska e-pošta u Pythonu ')

// bliska veza s GMAIL poslužiteljem
>>> mailobj.prestati()
(221, '2.0.0 zatvaračka veza b6sm4519863lfi.72 - gsmtp ')

U gornjem uzorku programa, zamijenite zadani sadržaj svojim. Ako niste korisnik GMAIL-a, tada možete koristiti poslužitelj e-pošte svog davatelja usluge. Evo popisa imena domena i priključaka nekih uobičajenih davatelja usluga pošte.

Ime Ime domene poslužitelja Luka
Gmail smtp.gmail.com 587
Outlook / Hotmail smtp-pošta.izgled.com 587
Yahoo mail smtp.pošta.yahoo.com 587
Verizon smtp.verizon.neto 465
Comcast smtp.comcast.neto 587

Neke riječi o IMAP-u

Dakle, upravo smo proučavali da se SMTP koristi za slanje e-pošte, ali što je IMAP (Internet Access Messaging Protocol) za? SMTP se ne može koristiti za pretraživanje i dobivanje e-pošte s poslužitelja, u tu svrhu koristi se protokol IMAP ili POP3.

IMAPCLIENT, IMAPLIB i PYZMAIL

U Pythonu postoje dvije glavne knjižnice koje se mogu koristiti kao IMAP klijent za pronalaženje, preuzimanje i brisanje e-pošte s poslužitelja e-pošte. Python ima zadane vrijednosti imaplib knjižnica već druga vanjska knjižnica imapclient je učinkovitiji i jednostavan za upotrebu. U ovom uputstvu ćemo se poslužiti imapclient za preuzimanje e-pošte s poslužitelja e-pošte.

Problem s imapclient jest da dohvaća e-poštu s poslužitelja pošte u sirovom formatu. Dakle, trebat ćemo pyzmail knjižnica kao parser za korisnički ispis. Da biste instalirali obje knjižnice, upišite

[zaštićena e-poštom]: ~ $ sudo pip instalirati imapclient
[zaštićena e-poštom]: ~ $ sudo pip instalirati pyzmail

Dobivanje e-pošte s poslužitelja pošte

Sada ćemo naučiti kako pretraživati ​​i preuzimati e-poštu s poslužitelja pošte koristeći imapclient. Upotrijebit ćemo imapclient za pretraživanje i preuzimanje e-pošte s poslužitelja, a zatim ćemo koristiti pyzmail za raščlanjivanje ovog sirovog sadržaja. Idemo

// uvoz biblioteke imapclient
>>> uvoz imapclient
// Povezivanje s IMAIL-ovim IMAP poslužiteljem
>>> obj = imapclient.IMAPClient ('imap.gmail.com ', ssl = True)
// Prijavite se na svoj račun e-pošte koristeći svoje vjerodajnice
>>> obj.prijava ('[e-mail zaštićen]', 's3cr4tp4ss')
'[e-pošta zaštićena] potvrđena (uspjeh)'
// Odaberite mapu s porukama za čitanje i.e INBOX, NACRTI, POSLANE mailove
>>> obj.select_folder ('INBOX', samo za čitanje = True)
'POSTOJI': 830, 'PERMANENTFLAGS': (), 'HIGHESTMODSEQ': 112999, 'UIDNEXT': 931,
'ZASTAVE': ('\\ Odgovorljeno', '\\ Označeno', '\\ Skica', '\\ Izbrisano', '\\ Vidjeno',
'$ NotPhishing', '$ Phishing'), 'UIDVALIDITY': 1, 'SAMO ZA ČITANJE': ["], 'RECENT': 0
// Pretražite svoje poruke u INBOX-u ili primijenite filtar, prikazat će se donji filtar
ste dobili mailove nakon 25. listopada 2019
>>> mail_ids = obj.traži (['SINCE', '25 -Okt-2019 '])
>>> mail_ids
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
// Popis "mail_ids" sadrži popis ID-ova e-pošte primljenih od 25. listopada 2019,
možete preuzeti e-poštu pomoću funkcije dohvaćanja imapclient.
>>> raw_mail = obj.dohvati ([919], ['TIJELO []', 'ZASTAVE'])
// Sadržaj varijable raw_mail je u sirovom formatu, ne može se prikazati na
zaslon izravno, pa bi nam trebao raščlanjivač za raščlanjivanje ovog sadržaja za korisnički izlaz
>>> uvoz pyzmail
>>> poruka = ​​pyzmail.PyzMessage.tvornica (raw_mail [919] ['TIJELO []'])
// E-pošta je sada raščlanjena i pohranjena u varijablu poruke da bi se dobio predmet
e-poštu, koristite funkciju get_subject
>>> poruka.get_subject ()
u'Odjenite svoje vještine ove Noći vještica sa 25% popusta '
// Slično tome, možete vidjeti detalje o pošiljatelju
>>> poruka.get_addresses ('from')
[(u'Usama Azad ',' [zaštićen e-poštom] ')]
>>> poruka.get_addresses ('to')
[(u '[e-pošta zaštićena]', '[e-pošta zaštićena]')]
// Da biste dobili tijelo e-pošte, upišite
>>> poruka.tekst_dio.get_payload ().dekodirati (poruka.tekst_dio.charset)
u "Bok! Uživajte u ravno 25% na našim premium tečajevima ”

Ako imate račun kod nekog drugog davatelja usluga e-pošte koji nije GMAIL, možete se prijaviti na njihov IMAP poslužitelj. Evo popisa imena IMAP domena nekih poznatih davatelja usluga pošte.

Pružatelj usluga Ime domene za IMAP poslužitelj
YAHOO imap.pošta.yahoo.com
Hotmail / Outlook imap-mail.izgled.com
Verizon dolazni.verizon.neto
Comcast imap.comcast.neto
AT&T imap.pošta.att.neto

Brisanje e-pošte s IMAP poslužitelja

Slično pretraživanju i preuzimanju e-pošte s poslužitelja, e-poštu možete izbrisati i sa svog poslužitelja e-pošte koristeći njihov uid. Samo slijedite dane korake

// Da biste izbrisali e-poštu, morate pretvoriti samo čitanje u 'False' da biste dobili pristup za pisanje na svoj
e-mailova
>>> obj.select_folder ('INBOX', samo za čitanje = False)
>>> mail_ids = obj.traži (['SINCE', '25 -Okt-2019 '])
>>> mail_ids
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
 
// Navedite uid za e-poštu ili popis uida za e-poštu, nakon pokretanja ispod naredbe,
vaša će e-pošta nestati s INBOX-a.
>>> obj.delete_messages (919)
919: ('\\ Vidjeno', '\\ Izbrisano')
 
// Ova će naredba trajno izbrisati vaše e-adrese s poslužitelja pošte
>>> obj.izbaciti ()
('Uspjeh', [])

https: // techtopz.com / build-a-birthday-podsjetnik-aplikacija-u-python-on-mac /

Sastavljanje vlastitog podsjetnika za rođendan

U narednim mjesecima imate rođendane svojih prijatelja i želite im poželjeti rođendan. Ali u svom uredu imate puno posla i postoji mogućnost da ćete ih zaboraviti poželjeti. Dakle, ovaj se zadatak može automatski izvršiti pomoću pythona. Slijedi kôd za izvršavanje ovog zadatka.

// uvoz modula
uvoz re
// os modul koristi se za izvršavanje zadataka operativnog sustava i.e pristup direktorijama
uvoz os
uvoz datum i vrijeme
uvoz smtplib
 
// definiranje funkcije koja će slati e-poštu
def send_mail (adresa_pošte_pošte, ime):
sender_mail_address = "[e-pošta zaštićena]"
passwd = "senderPasswd"
// povezivanje s gmail poslužiteljem s imenom domene i brojem porta
obj = smtplib.SMTP ('smtp.gmail.com ', 587)
obj.ehlo ()
obj.starttls ()
// prijava na vaš gmail račun
obj.prijava (sender_mail_address, passwd)
// slanje pošte na 'reciever_mail_address'.
obj.sendmail (sender_mail_address, reciever_mail_address, "Subject: BirthDay Wishing Mail \ n \ n Sretan rođendan" + ime)
// završna veza
obj.prestati()
// Glavno tijelo
// odlazak u direktorij u kojem je datoteka koja sadrži podatke
os.chdir ("path_to_file_data_datoteka_datoteka")
dok 1:
// dobivanje datuma i vremena sadašnjeg trenutka
danas = datum i vrijeme.Datum vrijeme.danas()
danas = str (danas)
// dobivanje tekuće godine, mjeseca, dana, sata, minute i sekunde
tekuća_ godina = danas [0: 4]
trenutni_mjesec = danas [5: 7]
current_day = danas [8:10]
current_hour = danas [11:13]
current_minute = danas [14:16]
current_sec = danas [17:19]
// otvaranje datoteke rođendana u objektu 'birthday_file' u načinu čitanja
file_rođendana = otvoren ('file_rođendana', 'r')
// spremanje svih redaka datoteke 'birthday_file' na popis redaka
linije = datoteka_rođendana.redovi za čitanje ()
// zatvaranje objekta 'birthday_file'
datoteka_rođendana.Zatvoriti()
// čitanje svakog retka pomoću for petlje
za redak u redovima:
// izrada regularnog izraza za pronalaženje datuma u 'file_rođendana'
dateEx = re.sastaviti (r "\ d 4 - \ d 2 - \ d 2")
findDate = dateEx.traži (linija)
datum = pronađiDatum.skupina()
// dobivanje rođendana_mjeseca i dana rođendana iz datoteke
rođendan_mjesec = datum [5: 7]
day_day = datum [8:10]
// izrada regularnog izraza za pronalaženje adrese pošte iz datoteke_rođendana
mailEx = re.sastaviti (r "\ w * @ \ w *.com ")
findMail = mailEx.traži (linija)
reciever_mail = findMail.skupina()
// izrada regularnog izraza za pronalaženje imena osobe
nameEx = re.sastaviti (r "\ w *")
findName = nameEx.traži (linija)
name = findName.skupina()
// provjera dolazi li nečiji rođendan ili ne
ako je current_month == birthday_month i = current_day == birthday_day:
// slanje pošte točno u 08:00
ako je current_hour == '08' i current_minute == '00' i current_sec == '00':
// pozivanje funkcije 'send_mail'
send_mail (reciever_mail, ime)

Sada izrađujemo "datoteku_rođendana", u koju spremamo imena, adrese e-pošte i njihov datum rođenja. Ovo je jednostavna tekstualna datoteka i izgleda ovako.

Obrazloženje

Pročitat ćemo ovu datoteku pomoću python skripte, provjeriti čiji rođendan dolazi i poželjeti im. Prije svega uvest ćemo neke module. DATETIME Modul ima funkcije koje nam daju trenutni datum i vrijeme i još mnogo toga. Ali ovo ćemo koristiti samo za pronalaženje trenutnog datuma i vremena. SMTPLIB modul koristi se za slanje pošte i gore je objašnjeno. RE modul ima funkcije koje se koriste za pronalaženje regularnog izraza iz niza.

U ovoj skripti definiramo funkciju 'send_mail' koja šalje poštu na 'reciever_mail_address', čije je ime 'name'. Oba argumenta se funkciji prosljeđuju iz glavnog dijela poruke. U glavnom dijelu skripte vidjet ćemo kako pronalazimo "reciever_mail_address" i "name".

Slanje e-pošte pomoću smtplib je objašnjeno gore, tako da ga možete pročitati i o njemu se ovdje neće raspravljati.

U glavnom dijelu idemo u direktorij u koji smo spremili 'birthday_file' koristeći 'os.chdir () '. Tada imamo 'while petlju' koja je uvijek istinita pa će kontinuirano provjeravati rođendan. Sada dobivamo trenutni datum i vrijeme i spremamo ih u varijablu 'danas'. Izgleda ovako.

2019-11-01 16:19:07.144925

Izdvojit ćemo godinu, mjesec, dan, sat, minute i sekunde koristeći indekse tih količina. Nakon toga otvorit ćemo datoteku rođendana u objektu 'datoteka rođendana' u načinu čitanja, tako da je možemo samo čitati. Sada ćemo spremiti sve retke ove datoteke na popis linija. 'datoteka_rođendana.readlines () 'spremit će svaki redak na popisu' linija '. Nakon toga zatvorit ćemo datoteku rođendana pomoću datoteke 'birthday_file.funkcija close () '.

Sada ćemo čitati svaki redak jedan po jedan koristeći for petlju. U svakom su retku dostupni samo podaci jedne osobe u datoteci 'birthday_file', tako da u ovoj petlji istodobno čitamo podatke samo jedne osobe.

Nakon toga izdvojit ćemo datum rođenja, e-adresu i ime osobe pomoću RE modula. Kao što smo zapisali datum u sljedećem formatu

GGGG-MM-DD

Tako ćemo napraviti regularni izraz 'dateEx' koji pronalazi ovaj format u retku.

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

Iznad naredbe pronađite niz koji ima '4 znamenke' nakon čega slijedi '-' pa '2 znamenke' nakon čega slijede '-' i '2 znamenke'. To će nam dati datum rođenja osobe, pa ćemo iz ovog izraza izdvojiti day_day i birth_month.

Slično ćemo pronaći adresu e-pošte pomoću regularnih izraza. Nakon toga usporedit ćemo mjesec_rođendan i tekući_mjesec te rođendan_dan i trenutni_dan. Ako su ovi uvjeti zadovoljeni, poslat ćemo rođendansku e-poštu pomoću funkcije 'send_mail' točno u '08: 00 '.

Automatsko pokretanje skripte putem Cronjoba

Sada ćemo se pobrinuti da se ova python skripta izvodi svaki put. Da bismo to učinili, dodat ćemo ovaj zadatak u crontab. Crontab se u Linuxu koristi za automatsko izvršavanje zadataka. Ono što moramo učiniti je samo dodati zadatak u crontab. Da biste to učinili, slijedite dane korake.

  1. Otvorite crontab da biste dodali zadatak u svoj terminal pomoću sljedeće naredbe
[e-pošta zaštićena]: ~ $ crontab -e
  1. Na kraju ove datoteke unesite sljedeću naredbu bez #
@reboot python path_to_the_script

Gore navedene naredbe omogućit će vašem sustavu pokretanje python skripte svaki put kada ponovno pokrenete sustav. Na taj će način vaš sustav pokretati python skriptu svaki put kad je vaš sustav uključen.

HD Remastered igre za Linux koje ranije nisu imale Linux izdanje
Mnogi programeri i izdavači igara dolaze s HD remasterom starih igara kako bi produžili životni vijek franšize, molimo obožavatelje da zatraže kompati...
Kako koristiti AutoKey za automatizaciju Linux igara
AutoKey je uslužni program za automatizaciju radne površine za Linux i X11, programiran na Python 3, GTK i Qt. Koristeći njegovu skriptiranje i MACRO ...
Kako prikazati brojač FPS-a u Linux igrama
Linux gaming dobio je velik poticaj kada je Valve najavio Linux podršku za Steam klijent i njihove igre 2012. godine. Od tada su mnoge AAA i indie igr...