Napríklad chcete poslať pripomenutie svojim zákazníkom na zostávajúce faktúry a máte všetky údaje súvisiace so zákazníkmi, ako sú ich telefónne čísla, adresy, vek atď., V excelovom hárku alebo databáze, namiesto manuálneho napísania jednoduchý program v Pythone, ktorý to automaticky urobí za vás. V tomto výučbe sa dozvieme, ako funguje e-mailový protokol a ako môžete proces automatizovať a ušetriť tak svoj drahocenný čas.
Slovo o SMTP
Protokol Simple Mail Transfer Protocol (SMTP) je počítačovým ekvivalentom vašej poštovej služby. Je to protokol, ktorý pracuje na aplikačnej vrstve siete TCP / IP. Je to štandardný protokol na odosielanie a prijímanie e-mailov cez internet. Proces prenosu pošty spočíva v tom, že e-mailové servery a klienti si navzájom posielajú a prijímajú e-maily.
Napríklad máte účet GMAIL a chcete poslať e-mail priateľovi na jeho účet YAHOO. Napíšete e-mail a kliknete na tlačidlo Odoslať, ale proces backendu je trochu komplikovaný. Ak chcete tomuto procesu porozumieť, musíte najskôr porozumieť protokolu SMTP. Najskôr odošle váš e-mailový klient SMTP AHOJ (alebo EHLO) na server GMAIL, môžete povedať, že tento príkaz alebo hlavička je ekvivalentom Hostiteľ hlavička v protokole HTTP a slúži na identifikáciu servera pomocou názvu domény. Po HELO alebo EHLO sa klient autentifikuje na serveri pomocou zadaného používateľského mena a hesla pomocou AUTOR príkaz. Potom určí e-mailovú adresu odosielateľa a príjemcu, potom telo správy a odošle e-mail na server GMAIL. Server GMAIL najskôr potvrdí, či e-mailová adresa príjemcu na serveri YAHOO existuje alebo nie, potom odošle e-mail na server YAHOO, kde si príjemca môže vyzdvihnúť svoje e-maily z.
SMTPLIB
SMTPLIB je knižnica pythonu, ktorú možno použiť ako klienta SMTP rovnako ako váš GMAIL, YAHOO, Thunderbird alebo iného e-mailového klienta a možno ju použiť na odosielanie e-mailov. Pomocou klienta SMTPLIB môžeme vykonávať všetky úlohy, ktoré môžeme robiť s tými, ktorí majú grafické užívateľské rozhranie.
Štandardne sa dodáva v Pythone, ak ho nemáte, môžete ho nainštalovať pomocou nasledujúceho príkazu.
[chránené e-mailom]: ~ $ pip nainštalujte smtplibALEBO v Pythone3
[chránené e-mailom]: ~ $ pip nainštalujte smtplibPísanie prvého e-mailu pomocou jazyka Python
V tomto tutoriále budem ako odosielateľ používať účet GMAIL. Taktiež budem využívať konzolu Python, takže mi bude jednoduchšie vysvetliť každý riadok kódu krok za krokom. Ak chcete začať, musíme povoliť prístup k menej bezpečným aplikáciám na serveri GMAIL.
Prihláste sa teda do svojho účtu GMAIL a potom prejdite do nastavení účtu.
Teraz sa uistite, že je zapnutý prístup pre menej bezpečné aplikácie.
Teraz otvorte svoju konzolu python a začnite písať svoj prvý e-mail pomocou jazyka Python
[chránené e-mailom]: ~ $ pythonPython 2.7.16 (predvolené, 7. októbra 2019, 17:36:04)
[GCC 8.3.0] na linux2
Ďalšie informácie získate zadaním výrazu „help“, „copyright“, „credit“ alebo „license“.
// import knižnice SMTP>>> import smtplib
// pripojenie k serveru GMAIL s názvom domény a číslom portu (toto nastavenie sa líši pre server)
každého poskytovateľa e-mailu, pozrite si nižšie uvedenú tabuľku)
>>> mailobj = smtplib.SMTP ('smtp.gmail.com ', 587)
// pozdrav ahoj server
>>> mailobj.ehlo ()
(250, „smtp.“.gmail.com k vašim službám, [103.255.4.246] \ nVEĽKOSŤ35882577 \ n8BITMIME \ nŠTARTTLS \
NENHANCEDSTATUSCODES \ nPIPELINING \ nCHUNKING \ nSMTPUTF8 ')
// Port 587 znamená, že používame šifrované pripojenie TLS, takže začnite šifrovaný TLS
komunikácia pomocou starttls (), aby sa k našim prihlasovacím údajom a správam nepričuchlo
>>> mailobj.starttls ()
(220, 2.0.0 pripravený na spustenie protokolu TLS ')
// prihlásiť sa do svojho účtu GMAIL pomocou e-mailu a hesla
>>> mailobj.prihlásenie ('[email protected]', 's3cr3t_p4ssw0rd')
(235, „2.7.0 akceptované ')
// zadajte e-mailovú adresu odosielateľa a príjemcu a obsah e-mailu
>>> mailobj.sendmail ('[chránený e-mailom]', '[chránený e-mailom]', 'Predmet:
Ahoj svet! \ n Ahoj svet! toto je môj prvý e-mail s pozdravom vo svete v Pythone ')
// úzke pripojenie k serveru GMAIL
>>> mailobj.skončiť ()
(221, 2.0.0 uzatváracie pripojenie b6sm4519863lfi.72 - gsmtp ')
Vo vyššie uvedenom ukážkovom programe nahraďte daný obsah vlastným. Ak nie ste používateľom GMAIL, môžete použiť e-mailový server vášho poskytovateľa. Tu je zoznam doménových mien a portov niektorých bežných poskytovateľov pošty.
názov | Názov domény servera | Prístav |
Gmail | smtp.gmail.com | 587 |
Outlook / Hotmail | smtp-mail.výhľad.com | 587 |
Yahoo Mail | smtp.poštou.jo.com | 587 |
Verizon | smtp.verizon.sieť | 465 |
Comcast | smtp.Comcast.sieť | 587 |
Niekoľko slov o IMAP
Takže sme práve študovali, že SMTP sa používa na odosielanie e-mailov, ale na čo slúži protokol IMAP (Internet Access Messaging Protocol)? SMTP nemožno použiť na vyhľadávanie a prijímanie e-mailov zo servera, na tento účel sa používa protokol IMAP alebo POP3.
IMAPCLIENT, IMAPLIB a PYZMAIL
V Pythone existujú dve hlavné knižnice, ktoré možno použiť ako klienta IMAP na vyhľadanie, načítanie a odstránenie e-mailov z poštového servera. Python má predvolené nastavenie imaplib knižnica, ale iná externá knižnica imapclient je efektívnejšie a ľahko použiteľné. V tomto výučbe použijeme imapclient na načítanie e-mailov z poštového servera.
Problém s imapclient je to, že získava e-maily z poštového servera v surovom formáte. Takže budeme potrebovať pyzmail knižnica ako analyzátor pre užívateľsky prívetivý výstup. Ak chcete nainštalovať obe knižnice, napíšte
[chránené e-mailom]: ~ $ sudo pip install imapclient[chránené e-mailom]: ~ $ sudo pip nainštalujte pyzmail
Príjem vašich e-mailov z poštového servera
Teraz sa naučíme, ako vyhľadávať a sťahovať e-maily z poštového servera pomocou imapclient. Na vyhľadávanie a sťahovanie e-mailov zo servera použijeme imapclient, potom na analýzu tohto nespracovaného obsahu použijeme pyzmail. Poďme
// import knižnice imapclient>>> import imapclient
// Pripojte sa k serveru IMMA spoločnosti GMAIL
>>> obj = imapclient.IMAPClient ('imap.gmail.com ', ssl = True)
// Prihláste sa do svojho e-mailového účtu pomocou svojich prihlasovacích údajov
>>> obj.prihlásenie ('[email protected]', 's3cr4tp4ss')
„[chránený e-mailom] overený (úspech)“
// Vyberte priečinok správ, ktorý chcete prečítať i.e DORUČENÉ, PRIESTORY, ODOSLANÉ e-maily
>>> obj.select_folder ('INBOX', readonly = True)
'EXISTS': 830, 'PERMANENTFLAGS': (), 'HIGHESTMODSEQ': 112999, 'UIDNEXT': 931,
„VLAJKY“: („Zodpovedané“, „Označené“, „Koncepty“, „Odstránené“, „Zobrazené“,
'$ NotPhishing', '$ Phishing'), 'UIDVALIDITY': 1, 'READ-ONLY': ["], 'RECENT': 0
// Vyhľadajte svoje správy v priečinku Doručená pošta alebo použite filter, zobrazí sa filter nižšie
vám e-maily prijaté po 25. októbri 2019
>>> mail_ids = obj.vyhľadávanie (['SINCE', '25 -okt-2019 '])
>>> mail_ids
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
// Zoznam „mail_ids“ obsahuje zoznam ID e-mailov prijatých od 25. októbra 2019,
môžete si stiahnuť e-mail pomocou funkcie načítania imapclient.
>>> raw_mail = obj.načítanie ([919], ['BODY []', 'VLAJKY'])
// Teraz je obsah v premennej raw_mail v surovom formáte, nemožno ho zobraziť na serveri
priamo na obrazovku, takže by sme potrebovali syntaktický analyzátor, ktorý by tento obsah analyzoval a priniesol užívateľsky prívetivý výstup
>>> importovať pyzmail
>>> správa = pyzmail.PyzMessage.továreň (raw_mail [919] ['BODY []']))
// Teraz je e-mail analyzovaný a uložený v premennej správy, aby sa získal predmet
e-mail, použite funkciu get_subject
>>> správa.get_subject ()
u'Zdobte si svoje schopnosti tento Halloween so zľavou 25% '
// Podobne môžete vidieť podrobnosti o odosielateľovi
>>> správa.get_addresses ('from')
[(u'Usama Azad ',' [[chránený e-mailom] '')]]
>>> správa.get_addresses ('to')
[(u '[chránený e-mailom]', '[chránený e-mailom]')]
// Ak chcete získať telo e-mailu, napíšte
>>> správa.text_part.get_payload ().dekódovať (správa.text_part.znaková sada)
u ”Ahoj! Užite si rovných 25% na našich prémiových kurzoch “
Ak máte účet u iného poskytovateľa e-mailových služieb ako GMAIL, môžete sa prihlásiť na jeho server IMAP. Tu je zoznam názvov domén IMAP niektorých slávnych poskytovateľov pošty.
Poskytovateľ | Názov domény pre server IMAP |
YAHOO | imap.poštou.jo.com |
Hotmail / Outlook | imap-mail.výhľad.com |
Verizon | prichádzajúci.verizon.sieť |
Comcast | imap.Comcast.sieť |
AT&T | imap.poštou.att.sieť |
Odstraňovanie e-mailov zo servera IMAP
Podobne ako pri vyhľadávaní a načítaní e-mailov zo servera môžete aj e-maily zo svojho poštového servera mazať pomocou ich uid. Stačí postupovať podľa uvedených krokov
// Ak chcete vymazať e-mail, musíte prepnúť iba na čítanie na hodnotu „False“, aby ste získali prístup na zápis do svojho súborue-maily
>>> obj.select_folder ('INBOX', readonly = False)
>>> mail_ids = obj.vyhľadávanie (['SINCE', '25 -okt-2019 '])
>>> mail_ids
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
// Zadajte e-mail e-mailu alebo zoznam e-mailových adries po spustení pod príkazom,
váš e-mail zmizne z priečinka Doručená pošta.
>>> obj.delete_messages (919)
919: ('\\ Videné', '\\ Odstránené')
// Tento príkaz natrvalo odstráni vaše e-maily zo servera Mail
>>> obj.vymazať ()
('Úspech', [])
https: // techtopz.com / build-a-birthday-remember-application-in-python-on-mac /
Tvorba vlastného pripomenutia narodenín
V nasledujúcich mesiacoch máte narodeniny svojich priateľov a chcete im popriať ich narodeniny. Ale vo svojej kancelárii máte veľa práce a je tu možnosť, že si ich zabudnete zaželať. Takže táto úloha môže byť automaticky vykonaná pomocou pythonu. Nasleduje kód na vykonanie tejto úlohy.
// import modulovimport re
// modul os sa používa na vykonávanie úloh operačného systému, i.e prístup k adresárom
import os
importovať čas a čas
import smtplib
// definovanie funkcie, ktorá bude posielať e-maily
def send_mail (adresa_prijímateľa, meno):
sender_mail_address = "[chránený e-mailom]"
passwd = "senderPasswd"
// pripojenie k serveru Gmail s názvom domény a číslom portu
obj = smtplib.SMTP ('smtp.gmail.com ', 587)
obj.ehlo ()
obj.starttls ()
// prihlásenie do účtu Gmail
obj.login (sender_mail_address, passwd)
// odosielanie pošty na adresu „reciever_mail_address“.
obj.sendmail (sender_mail_address, reciever_mail_address, "Predmet: BirthDay Wishing Mail \ n \ n HappyBirthday" + meno)
// ukončenie spojenia
obj.skončiť ()
// Hlavné telo
// prechod do adresára, v ktorom je súbor obsahujúci údaje
os.chdir ("cesta_do_narodenia_data_file")
zatiaľ čo 1:
// získanie dátumu a času aktuálneho okamihu
dnes = dátum a čas.Dátum Čas.dnes ()
dnes = str (dnes)
// získanie aktuálneho roku, mesiaca, dňa, hodiny, minúty a sekundy
current_year = today [0: 4]
current_month = dnes [5: 7]
current_day = dnes [8:10]
current_hour = dnes [11:13]
current_minute = dnes [14:16]
current_sec = dnes [17:19]
// otvorenie súboru narodenín v objekte „birthday_file“ v režime čítania
birthday_file = open ('birthday_file', 'r')
// uloženie všetkých riadkov súboru „birthday_file“ do zoznamu riadkov
lines = narodeninovy_soubor.readlines ()
// zatváranie objektu „birthday_file“
narodeninovy_soubor.Zavrieť()
// načítanie každého riadku pomocou cyklu for
pre riadok v riadku:
// vytvorenie regulárneho výrazu na vyhľadanie dátumu v súbore „birthday_file“
dateEx = re.kompilovať (r "\ d 4 - \ d 2 - \ d 2")
findDate = dateEx.hľadať (riadok)
date = findDate.skupina ()
// získanie súboru birthday_month a birthday_day zo súboru
narodeniny_mesiac = dátum [5: 7]
narodeniny_deň = dátum [8:10]
// vytvorenie regulárneho výrazu na vyhľadanie e-mailovej adresy zo súboru birthday_file
mailEx = re.kompilovať (r "\ w * @ \ w *.com ")
findMail = mailEx.hľadať (riadok)
reciever_mail = findMail.skupina ()
// vytvorenie regulárneho výrazu na vyhľadanie mena osoby
menoEx = re.kompilovať (r "\ w *")
findName = menoEx.hľadať (riadok)
meno = findName.skupina ()
// kontrola, či niekto nemá narodeniny alebo nie
if current_month == birthday_month a = current_day == birthday_day:
// posielanie pošty presne o 08:00
if current_hour == '08' and current_minute == '00' and current_sec == '00':
// volanie funkcie 'send_mail'
send_mail (príjemca_mail, meno)
Teraz vytvoríme súbor „birthday_file“, do ktorého uložíme mená, e-mailové adresy a ich dátum narodenia. Toto je jednoduchý textový súbor a vyzerá takto.
Vysvetlenie
Tento súbor prečítame pomocou pythonovského skriptu a skontrolujeme, ktorého narodeniny sa blížia, a zaželáme mu to. Najskôr importujeme niektoré moduly. Modul DATETIME má funkcie, ktoré nám poskytujú aktuálny dátum a čas a mnoho ďalších. Toto však použijeme iba na zistenie aktuálneho dátumu a času. Modul SMTPLIB sa používa na odosielanie pošty a bol vysvetlený vyššie. RE modul má funkcie, ktoré slúžia na nájdenie regulárneho výrazu z reťazca.
V tomto skripte definujeme funkciu „send_mail“, ktorá odosiela poštu na adresu „reciever_mail_address“, ktorej meno je „name“. Oba argumenty sú funkcii odovzdané z hlavnej časti správy. V hlavnej časti skriptu uvidíme, ako nájdeme adresy „reciever_mail_address“ a „name“.
Posielanie e-mailov pomocou smtplibu bolo vysvetlené vyššie, takže si ich môžete prečítať a tu sa o nich nebude diskutovať.
V hlavnom tele prejdeme do adresára, do ktorého sme pomocou súboru „os“ uložili súbor „birthday_file“.chdir () '. Potom máme „while“, ktorá je vždy pravdivá, takže bude neustále kontrolovať narodeniny. Teraz získame aktuálny dátum a čas a uložíme ho do premennej „today“. Vyzerá to asi takto.
2019-11-01 16:19:07.144925Extrahujeme rok, mesiac, deň, hodinu, minúty a sekundy pomocou indexov týchto množstiev. Potom otvoríme súbor narodeniny v objekte „narodeniny_súbor“ v režime čítania, takže ho môžeme čítať iba. Teraz uložíme všetky riadky tohto súboru do zoznamu riadkov. „narodeninovy_soubor.readlines () 'uloží každý riadok do zoznamu' riadkov '. Potom zavrieme súbor birthday_file pomocou súboru 'birthday_file.funkcia close () '.
Teraz budeme čítať každý riadok jeden po druhom pomocou cyklu for. V každom riadku sú k dispozícii iba údaje jednej osoby v súbore „birthday_file“, takže v tejto slučke čítame naraz iba údaje jednej osoby.
Potom pomocou modulu RE extrahujeme dátum narodenia, e-mailovú adresu a meno osoby. Ako sme napísali dátum v nasledujúcom formáte
RRRR-MM-DDTakže urobíme regulárny výraz 'dateEx', ktorý nájde tento formát v riadku.
re.kompilovať (r ”\ d 4 - \ d 2 - \ d 2”)Nad príkazom nájdite reťazec, ktorý má „4 číslice“, za ktorými nasleduje „-“ potom „2 číslice“, za ktorými nasledujú „-“ a „2 číslice“. Získate tým dátum narodenia osoby, takže z tohto výrazu vyberieme dátum narodenia a deň narodenia.
Podobne nájdeme e-mailovú adresu pomocou regulárnych výrazov. Potom budeme porovnávať narodeniny_mesiac a current_mesiac a narodeniny_day a current_day. Ak sú tieto podmienky splnené, pošleme vám e-mail s dátumom narodenia pomocou funkcie „send_mail“ presne v čase „08:00“.
Automatické spustenie skriptu cez Cronjob
Teraz zaistíme, aby sa tento skript v Pythone spustil zakaždým. Za týmto účelom pridáme túto úlohu do programu crontab. Crontab v linuxe sa používa na automatické vykonávanie úloh. Musíme len pridať úlohu do crontabu. Postupujte podľa uvedených krokov.
- Otvorte crontab a pridajte úlohu do svojho terminálu pomocou nasledujúceho príkazu
- Na konci tohto súboru zadajte nasledujúci príkaz bez #
Vyššie uvedené príkazy umožnia vášmu systému spustiť pythonovský skript pri každom reštartovaní systému. Týmto spôsobom váš systém spustí pythonovský skript vždy, keď je váš systém zapnutý.