Krajta

Odesílání e-mailů pomocí Pythonu

Odesílání e-mailů pomocí Pythonu
Odesílání, kontrola a odpovídání na e-maily je časově náročný úkol, zvláště když to děláte pro velký počet lidí nebo zákazníků, kde stačí změnit jméno, adresu, věk a další drobné věci příjemce. Bylo by pro vás velmi obtížné napsat program, který by zvládl všechny typy vašich osobních / obchodních e-mailů, ale přesto můžete v tomto ohledu automatizovat spoustu věcí, které vám nakonec ušetří spoustu času.

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 smtplib

NEBO v Pythonu3

[chráněno e-mailem]: ~ $ pip install smtplib

Psaní 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]: ~ $ python
Python 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ého
e-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.144925

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

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

  1. Otevřete crontab a přidejte úkol do svého terminálu pomocí následujícího příkazu
[chráněno e-mailem]: ~ $ crontab -e
  1. Na konci tohoto souboru zadejte následující příkaz bez #
@ restartovat python path_to_the_script

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

Hry SuperTuxKart pro Linux
SuperTuxKart pro Linux
SuperTuxKart je skvělý titul navržený tak, aby vám ve vašem systému Linux přinesl zážitek Mario Kart zdarma. Je to docela náročné a zábavné hrát, je n...
Hry Výukový program Battle for Wesnoth
Výukový program Battle for Wesnoth
The Battle for Wesnoth je jednou z nejpopulárnějších strategických her s otevřeným zdrojovým kódem, které si v tuto chvíli můžete zahrát. Tato hra se ...
Hry 0 A.D. Tutorial
0 A.D. Tutorial
Z mnoha strategických her venku je 0 A.D. dokáže vyniknout jako komplexní titul a velmi hluboká, taktická hra, přestože je otevřeným zdrojem. Vývoj hr...