Python

Posielanie e-mailov pomocou Pythonu

Posielanie e-mailov pomocou Pythonu
Posielanie, kontrola a odpovedanie na e-maily je časovo náročná úloha, najmä keď to robíte pre veľký počet ľudí alebo zákazníkov, kde stačí zmeniť meno, adresu, vek a ďalšie drobnosti príjemcu. Bolo by pre vás veľmi ťažké napísať program, ktorý by zvládol všetky typy vašich osobných / obchodných e-mailov, ale napriek tomu v tomto ohľade môžete automatizovať množstvo vecí, ktoré vám nakoniec ušetria veľa času.

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 smtplib

ALEBO v Pythone3

[chránené e-mailom]: ~ $ pip nainštalujte smtplib

Pí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]: ~ $ python
Python 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úboru
e-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 modulov
import 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.144925

Extrahujeme 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-DD

Takž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.

  1. Otvorte crontab a pridajte úlohu do svojho terminálu pomocou nasledujúceho príkazu
[chránené e-mailom]: ~ $ crontab -e
  1. Na konci tohto súboru zadajte nasledujúci príkaz bez #
@ reštartovať python path_to_the_script

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ý.

Hry Najlepšie emulátory herných konzol pre systém Linux
Najlepšie emulátory herných konzol pre systém Linux
V tomto článku je uvedený zoznam populárneho softvéru na emuláciu herných konzol, ktorý je k dispozícii pre systém Linux. Emulácia je vrstva kompatibi...
Hry Najlepšie linuxové distribúcie pre hry v roku 2021
Najlepšie linuxové distribúcie pre hry v roku 2021
Operačný systém Linux prešiel dlhou cestou od svojho originálneho, jednoduchého serverového vzhľadu. Tento OS sa za posledné roky nesmierne vylepšil a...
Hry Ako zachytiť a streamovať vašu hernú reláciu v systéme Linux
Ako zachytiť a streamovať vašu hernú reláciu v systéme Linux
V minulosti sa hranie hier považovalo iba za hobby, ale časom došlo v hernom priemysle k obrovskému nárastu z hľadiska technológie i počtu hráčov. Her...