Například chcete svým zákazníkům poslat připomenutí jejich zbývajících účtů a máte všechna data týkající se zákazníků, jako jsou jejich telefonní čísla, adresa, věk atd., V listu aplikace Excel nebo v databázi, a místo ručního psaní můžete napsat jednoduchý program v Pythonu, který to automaticky provede za vás. V tomto kurzu se dozvíme, jak funguje e-mailový protokol a jak můžete automatizovat proces a ušetřit tak drahocenný čas.
Slovo o SMTP
Protokol SMTP (Simple Mail Transfer Protocol) je počítačovým ekvivalentem vaší poštovní služby. Jedná se o protokol, který pracuje na aplikační vrstvě sítě TCP / IP. Je to standardní protokol pro odesílání a příjem e-mailů přes internet. Proces přenosu pošty se skládá z e-mailových serverů a klientů, kteří si navzájem posílají a přijímají e-maily.
Například máte účet GMAIL a chcete poslat e-mail svému příteli na jeho účet YAHOO. Napíšete e-mail a stisknete Odeslat, ale proces backendu je trochu komplikovaný a abyste tomuto procesu porozuměli, musíte nejprve porozumět SMTP. Nejprve odešle váš e-mailový klient SMTP AHOJ (nebo EHLO) na server GMAIL, můžete říci, že tento příkaz nebo záhlaví je ekvivalentní Hostitel záhlaví v protokolu HTTP a slouží k identifikaci serveru pomocí názvu domény. Po HELO nebo EHLO se klient autentizuje na serveru pomocí daného uživatelského jména a hesla pomocí AUTH příkaz. Poté určí e-mailovou adresu odesílatele a příjemce a poté tělo zprávy a odešle e-mail na server GMAIL. Server GMAIL nejprve potvrdí, že ať už e-mailová adresa příjemce na YAHOO existuje, či nikoli, odešle e-mail na server YAHOO, kde si příjemce může načíst jeho e-maily z.
SMTPLIB
SMTPLIB je knihovna pythonu, kterou lze použít jako klienta SMTP, stejně jako váš GMAIL, YAHOO, Thunderbird nebo jakýkoli jiný e-mailový klient, a lze ji použít k odesílání e-mailů. Můžeme provádět všechny úkoly pomocí klienta SMTPLIB, které můžeme dělat s těmi, kteří mají grafické uživatelské rozhraní.
Ve výchozím nastavení je dodáván v Pythonu, pokud jej nemáte, můžete jej nainstalovat pomocí následujícího příkazu.
[chráněno e-mailem]: ~ $ pip install smtplibNEBO v Pythonu3
[chráněno e-mailem]: ~ $ pip install smtplibPsaní prvního e-mailu pomocí Pythonu
V tomto tutoriálu použiji jako odesílatele účet GMAIL, také budu využívat konzolu Pythonu, takže bude pro mě snazší vysvětlit každý řádek kódu krok za krokem. Chcete-li začít, musíme povolit náš GMAIL přístup k méně zabezpečeným aplikacím.
Přihlaste se tedy ke svému účtu GMAIL a poté přejděte do nastavení účtu.
Nyní se ujistěte, že je zapnutý přístup pro méně zabezpečené aplikace.
Nyní otevřete konzolu pythonu a začněte psát svůj první e-mail pomocí Pythonu
[chráněno e-mailem]: ~ $ pythonPython 2.7.16 (výchozí, 7. října 2019, 17:36:04)
[GCC 8.3.0] na linux2
Další informace získáte zadáním „help“, „copyright“, „credit“ nebo „license“.
// import knihovny SMTP>>> import smtplib
// připojení k serveru GMAIL s názvem domény a číslem portu (toto nastavení se liší pro
každý poskytovatel e-mailu, podívejte se prosím na níže uvedenou tabulku)
>>> mailobj = smtplib.SMTP ('smtp.gmail.com ', 587)
// pozdravím server
>>> mailobj.ehlo ()
(250, smtp.gmail.com k vašim službám, [103.255.4.246] \ nVELIKOST 35882577 \ n8BITMIME \ nSTARTTLS \
NENHANCEDSTATUSCODES \ nPIPELINING \ nCHUNKING \ nSMTPUTF8 ')
// Port 587 znamená, že používáme šifrované připojení TLS, takže začněte šifrovaný TLS
komunikace pomocí starttls (), aby naše přihlašovací údaje a zprávy nezachycovaly
>>> mailobj.starttls ()
(220, „2.0.0 Připraveno ke spuštění TLS ')
// přihlaste se ke svému účtu GMAIL pomocí e-mailu a hesla
>>> mailobj.přihlášení ('[chráněno e-mailem' ',' s3cr3t_p4ssw0rd ')
(235, 2.7.0 přijato ')
// uveďte e-mailovou adresu odesílatele a příjemce a obsah e-mailu
>>> mailobj.sendmail ('[email protected]', '[email protected]', 'Předmět:
Ahoj světe! \ n Ahoj světe! toto je můj první ahoj světový e-mail v Pythonu ')
// uzavřít připojení k serveru GMAIL
>>> mailobj.přestat()
(221, „2.0.0 uzavírací spojení b6sm4519863lfi.72 - gsmtp ')
Ve výše uvedeném ukázkovém programu nahraďte daný obsah vlastním. Pokud nejste uživatelem GMAIL, můžete použít e-mailový server vašeho poskytovatele. Zde je seznam doménových jmen a portů některých běžných poskytovatelů pošty.
název | Název domény serveru | Přístav |
Gmail | smtp.gmail.com | 587 |
Outlook / Hotmail | smtp-mail.výhled.com | 587 |
Pošta YAHOO | smtp.pošta.jo.com | 587 |
Verizon | smtp.verizon.síť | 465 |
Comcast | smtp.Comcast.síť | 587 |
Některá slova o IMAP
Právě jsme tedy studovali, že SMTP se používá k odesílání e-mailů, ale k čemu slouží IMAP (Internet Access Messaging Protocol)? SMTP nelze použít k vyhledávání a přijímání e-mailů ze serveru, k tomuto účelu se používá protokol IMAP nebo POP3.
IMAPCLIENT, IMAPLIB a PYZMAIL
V Pythonu existují dvě hlavní knihovny, které lze použít jako klienta IMAP k vyhledávání, načítání a mazání e-mailů z poštovního serveru. Python má výchozí nastavení imaplib knihovna, ale jiná externí knihovna imapclient je efektivnější a snadno použitelný. V tomto kurzu použijeme imapclient načíst e-maily z poštovního serveru.
Problém s imapclient je to, že načítá e-maily z poštovního serveru v surovém formátu. Takže budeme potřebovat pyzmail knihovna jako analyzátor pro uživatelsky přívětivý výstup. Chcete-li nainstalovat obě knihovny, zadejte
[chráněno e-mailem]: ~ $ sudo pip install imapclient[chráněno e-mailem]: ~ $ sudo pip install pyzmail
Získávání e-mailů z poštovního serveru
Nyní se naučíme, jak vyhledávat a stahovat e-maily z poštovního serveru pomocí imapclient. K prohledávání a stahování e-mailů ze serveru použijeme imapclient, pak použijeme pyzmail k analýze tohoto surového obsahu. Pojďme
// import knihovny imapclient>>> import imapclient
// Připojte se k serveru IMMA GMAIL
>>> obj = imapclient.IMAPClient ('imap.gmail.com ', ssl = True)
// Přihlaste se ke svému e-mailovému účtu pomocí svých přihlašovacích údajů
>>> obj.přihlášení ('[chráněno e-mailem', 's3cr4tp4ss')
„[chráněno e-mailem] ověřeno (úspěch)“
// Vyberte složku se zprávami ke čtení i.e DORUČENÉ, NÁVRHY, ODESLANÉ e-maily
>>> obj.select_folder ('INBOX', readonly = True)
'EXISTS': 830, 'PERMANENTFLAGS': (), 'HIGHESTMODSEQ': 112999, 'UIDNEXT': 931,
'FLAGS': ('\\ Answered', '\\ Flagging', '\\ Draft', '\\ Deleted', '\\ Seen',
'$ NotPhishing', '$ Phishing'), 'UIDVALIDITY': 1, 'READ-ONLY': ["], 'RECENT': 0
// Prohledejte své zprávy ve složce Doručená pošta nebo použijte filtr, zobrazí se filtr níže
vám přijaté e-maily po 25. říjnu 2019
>>> mail_ids = obj.vyhledávání (['SINCE', '25 -Oct-2019 '])
>>> mail_ids
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
// Seznam „mail_ids“ obsahuje seznam ID e-mailů přijatých od 25. října 2019,
e-mail si můžete stáhnout pomocí funkce načítání imapclient.
>>> raw_mail = obj.načíst ([919], ['BODY []', 'VLAJKY'])
// Nyní je obsah proměnné raw_mail v nezpracovaném formátu, nelze jej zobrazit na
obrazovka přímo, Takže bychom potřebovali analyzátor, který by analyzoval tento obsah pro uživatelsky přívětivý výstup
>>> importovat pyzmail
>>> message = pyzmail.PyzMessage.továrna (raw_mail [919] ['BODY []'])
// Nyní je e-mail analyzován a uložen do proměnné zprávy, aby se získal předmět
e-mail, použijte funkci get_subject
>>> zpráva.get_subject ()
u'Ozdobte své dovednosti tento Halloween s 25% slevou '
// Podobně můžete vidět podrobnosti o odesílateli
>>> zpráva.get_addresses ('from')
[(u'Usama Azad ',' [e-mail chráněn] ')]]
>>> zpráva.get_addresses ('to')
[(u '[e-mail chráněn]', '[e-mail chráněn]')]
// Chcete-li získat tělo e-mailu, zadejte
>>> zpráva.text_part.get_payload ().dekódovat (zpráva.text_part.znaková sada)
u ”Ahoj! Užijte si plochých 25% na našich prémiových kurzech “
Pokud máte účet u jiného poskytovatele e-mailových služeb než GMAIL, můžete se přihlásit k jeho serveru IMAP. Zde je seznam názvů domén IMAP některých slavných poskytovatelů pošty.
Poskytovatel | Název domény pro server IMAP |
YAHOO | imap.pošta.jo.com |
Hotmail / Outlook | imap-mail.výhled.com |
Verizon | přicházející.verizon.síť |
Comcast | imap.Comcast.síť |
AT&T | imap.pošta.att.síť |
Smazání e-mailu ze serveru IMAP
Podobně jako při vyhledávání a načítání e-mailů ze serveru můžete také mazat e-maily ze svého poštovního serveru pomocí jejich uid. Postupujte podle uvedených kroků
// Chcete-li smazat e-mail, musíte nastavit přístup pouze pro čtení na 'False', abyste získali přístup k zápisu do svéhoe-maily
>>> obj.select_folder ('INBOX', readonly = False)
>>> mail_ids = obj.vyhledávání (['SINCE', '25 -Oct-2019 '])
>>> mail_ids
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
// Po spuštění pod příkazem uveďte e-mail e-mailu nebo seznam e-mailů e-mailu,
váš e-mail zmizí z Doručené pošty.
>>> obj.delete_messages (919)
919: ('\\ Seen', '\\ Deleted')
// Tento příkaz trvale odstraní vaše e-maily ze serveru pošty
>>> obj.expunge ()
('Úspěch', [])
https: // techtopz.com / build-a-birthday-připomenutí-aplikace-v-pythonu-na-mac /
Vytváření vlastního připomenutí narozenin
V nadcházejících měsících máte narozeniny svých přátel a chcete jim popřát jejich narozeniny. Ve své kanceláři však máte hodně práce a existuje možnost, že jim zapomenete popřát. Takže tento úkol lze automaticky provést pomocí pythonu. Následuje kód pro provedení tohoto úkolu.
// import modulůimport re
// modul os se používá k provádění úkolů operačního systému i.e přístup k adresářům
import os
import datetime
importovat smtplib
// definování funkce, která bude odesílat e-maily
def send_mail (adresa_příjemce_mailu, jméno):
sender_mail_address = "[e-mail chráněn]"
passwd = "senderPasswd"
// připojení k serveru Gmail s názvem domény a číslem portu
obj = smtplib.SMTP ('smtp.gmail.com ', 587)
obj.ehlo ()
obj.starttls ()
// přihlášení ke svému účtu Gmail
obj.login (sender_mail_adresa, heslo)
// odesílání pošty na adresu „reciever_mail_address“.
obj.sendmail (sender_mail_address, reciever_mail_address, "Subject: BirthDay Wishing Mail \ n \ n HappyBirthday" + jméno)
// ukončení spojení
obj.přestat()
// Hlavní tělo
// přechod do adresáře, ve kterém je soubor obsahující data
os.chdir ("path_to_birthday_data_file")
zatímco 1:
// získání data a času přítomného okamžiku
dnes = datetime.čas schůzky.dnes()
dnes = str (dnes)
// získání aktuálního roku, měsíce, dne, hodiny, minuty a sekundy
current_year = dnes [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]
// otevření souboru narozenin v objektu 'birthday_file' v režimu čtení
birthday_file = open ('birthday_file', 'r')
// uložení všech řádků souboru „birthday_file“ do seznamu řádků
lines = narozeniny_soubor.readlines ()
// zavírání objektu 'birthday_file'
narozeninový_soubor.zavřít()
// čtení každého řádku pomocí smyčky for
pro řádek v řádcích:
// vytvoření regulárního výrazu k vyhledání data v souboru „birthday_file“
dateEx = re.kompilace (r "\ d 4 - \ d 2 - \ d 2")
findDate = dateEx.hledat (řádek)
date = findDate.skupina()
// získávání narozeninového měsíce a narozeninového dne ze souboru
birthday_month = date [5: 7]
narozeniny_den = datum [8:10]
// vytvoření regulárního výrazu k vyhledání e-mailové adresy ze souboru birthday_file
mailEx = re.kompilovat (r "\ w * @ \ w *.com ")
findMail = mailEx.hledat (řádek)
reciever_mail = findMail.skupina()
// vytvoření regulárního výrazu k vyhledání jména osoby
nameEx = re.kompilace (r "\ w *")
findName = nameEx.hledat (řádek)
name = findName.skupina()
// kontrola, zda někdo má narozeniny nebo ne
pokud current_month == birthday_month a = current_day == birthday_day:
// odesílání pošty přesně v 8:00
pokud current_hour == '08' a current_minute == '00' a current_sec == '00':
// volání funkce „send_mail“
send_mail (reciever_mail, jméno)
Nyní vytvoříme soubor „birthday_file“, do kterého ukládáme jména, e-mailové adresy a jejich datum narození. Toto je jednoduchý textový soubor a vypadá takto.
Vysvětlení
Přečteme tento soubor pomocí skriptu pythonu a zkontrolujeme, jehož narozeniny se blíží, a popřeme jim to. Nejprve importujeme některé moduly. Modul DATETIME má funkce, které nám poskytují aktuální datum a čas a mnoho dalších. Toto však použijeme pouze k nalezení aktuálního data a času. Modul SMTPLIB se používá k odesílání pošty a byl vysvětlen výše. RE modul má funkce, které slouží k nalezení regulárního výrazu z řetězce.
V tomto skriptu definujeme funkci „send_mail“, která odesílá poštu na adresu „reciever_mail_address“, jejíž jméno je „name“. Oba argumenty jsou předány funkci z hlavního těla zprávy. V hlavní části skriptu uvidíme, jak najdeme 'reciever_mail_address' a 'name'.
Odesílání e-mailů pomocí smtplibu bylo vysvětleno výše, takže si je můžete přečíst a zde o nich nebude pojednáno.
V hlavní části přejdeme do adresáře, kam jsme uložili soubor „birthday_file“ pomocí „os.chdir () '. Pak máme „while“, která je vždy pravdivá, takže bude neustále kontrolovat narozeniny. Nyní získáme aktuální datum a čas a uložíme jej do proměnné „today“. Vypadá to takhle.
2019-11-01 16:19:07.144925Extrahujeme rok, měsíc, den, hodinu, minuty a sekundy pomocí indexů těchto veličin. Poté otevřeme soubor birthday_file v objektu 'birthday_file' v režimu čtení, abychom jej mohli číst pouze. Nyní uložíme všechny řádky tohoto souboru do seznamu řádků. 'narozeniny_soubor.readlines () 'uloží každý řádek do seznamu' řádků '. Poté zavřeme soubor birthday_file pomocí souboru 'birthday_file.funkce close () '.
Nyní budeme číst každý řádek jeden po druhém pomocí smyčky for. V každém řádku jsou v souboru „birthday_file“ k dispozici pouze data jedné osoby, takže v této smyčce čteme pouze data jedné osoby najednou.
Poté pomocí modulu RE extrahujeme datum narození, e-mailovou adresu a jméno osoby. Jak jsme napsali datum v následujícím formátu
RRRR-MM-DDTakže uděláme regulární výraz 'dateEx', který najde tento formát v řádku.
re.kompilovat (r ”\ d 4 - \ d 2 - \ d 2”)Nad příkazem vyhledejte řetězec, který má '4 číslice' následované '-', potom '2 číslice' následované '-' a '2 číslicemi'. Tím získáte datum narození osoby, takže z tohoto výrazu získáme datum narození a měsíc narození.
Podobně najdeme e-mailovou adresu pomocí regulárních výrazů. Poté porovnáme narozeniny_měsíc a aktuální_měsíc a narozeniny_den a aktuální_den. Pokud jsou tyto podmínky splněny, pošleme e-mail k narozeninám pomocí funkce „send_mail“ přesně v „08:00“.
Spuštění skriptu automaticky pomocí Cronjob
Nyní se ujistíme, že tento skript pythonu běží pokaždé. Za tímto účelem přidáme tento úkol do crontabu. Crontab v Linuxu se používá k automatickému provádění úkolů. Musíme jen přidat úkol do crontabu. Postupujte podle uvedených kroků.
- Otevřete crontab a přidejte úkol do svého terminálu pomocí následujícího příkazu
- Na konci tohoto souboru zadejte následující příkaz bez #
Výše uvedené příkazy umožní vašemu systému spustit skript pythonu při každém restartování systému. Tímto způsobem váš systém spustí pythonový skript pokaždé, když je váš systém zapnutý.