Piton

Trimiterea de e-mailuri cu Python

Trimiterea de e-mailuri cu Python
Trimiterea, verificarea și răspunsul la e-mailuri este o sarcină care necesită mult timp, mai ales atunci când o faceți pentru un număr mare de persoane sau clienți în care trebuie doar să schimbați numele destinatarului, adresa, vârsta și alte lucruri mici. Ar fi o sarcină foarte dificilă pentru dvs. să scrieți un program care să poată gestiona toate tipurile de e-mailuri personale / de afaceri, dar totuși puteți automatiza o mulțime de lucruri în acest sens, ceea ce vă va economisi în cele din urmă mult timp.

De exemplu, doriți să trimiteți un memento clienților dvs. pentru facturile rămase și aveți toate datele legate de clienți, cum ar fi numerele lor de telefon, adresa, vârsta etc. într-o foaie Excel sau într-o bază de date, apoi, în loc să o faceți manual, puteți scrie un program simplu în Python pentru a face automat acest lucru pentru dvs. În acest tutorial, vom afla cum funcționează protocolul de e-mail și cum puteți automatiza procesul pentru a vă economisi timpul prețios.

Un cuvânt despre SMTP

Simple Mail Transfer Protocol (SMTP) este echivalent computerizat al serviciului dvs. poștal. Este un protocol care funcționează pe stratul de aplicație al unei rețele TCP / IP. Este un protocol standard pentru trimiterea și primirea de e-mailuri pe internet. Procesul de transfer de e-mail constă în trimiterea și primirea de e-mailuri către servere de e-mail și clienți.

De exemplu, aveți un cont GMAIL și doriți să trimiteți un e-mail prietenului dvs. pe contul său YAHOO. Scrieți un e-mail și accesați trimiterea, dar procesul de backend este puțin complicat și, pentru a înțelege acest proces, va trebui să înțelegeți mai întâi SMTP. Clientul dvs. de e-mail SMTP trimite mai întâi BUN (sau EHLO) către serverul GMAIL, puteți spune că această comandă sau antet este echivalentă cu Gazdă antetul în protocolul HTTP și este utilizat pentru a identifica serverul folosind numele de domeniu. După HELO sau EHLO, clientul se autentifică pe server cu numele de utilizator și parola date folosind AUTOR comanda. Apoi specifică adresa de e-mail a expeditorului și destinatarului, apoi corpul mesajului și trimite e-mail la serverul GMAIL. Serverul GMAIL va confirma mai întâi că dacă adresa de e-mail a destinatarului pe YAHOO există sau nu, apoi va trimite e-mailul către serverul YAHOO de unde destinatarul își poate prelua e-mailurile.

SMTPLIB

SMTPLIB este o bibliotecă python care poate fi utilizată ca client SMTP la fel ca GMAIL, YAHOO, Thunderbird sau orice alt client de e-mail și poate fi utilizat pentru a trimite e-mailuri. Putem efectua toate sarcinile folosind clientul SMTPLIB pe care le putem face cu cei care au interfață grafică de utilizator.

Acesta vine în mod implicit în Python, în cazul în care nu îl aveți, atunci puteți instala folosind următoarea comandă.

[e-mail protejat]: ~ $ pip instalează smtplib

SAU în Python3

[e-mail protejat]: ~ $ pip instalează smtplib

Scrierea primului dvs. e-mail cu Python

În acest tutorial, voi folosi un cont GMAIL ca expeditor, de asemenea, voi folosi consola Python, așa că îmi va fi mai ușor să explic fiecare linie de cod pas cu pas. Pentru a începe, trebuie să permitem accesul nostru GMAIL la aplicații mai puțin sigure.

Deci, conectați-vă la contul dvs. GMAIL și apoi accesați setările contului.

Acum asigurați-vă că accesul pentru aplicații mai puțin sigure este activat.

Acum deschideți consola Python și începeți să scrieți primul dvs. e-mail folosind Python

[e-mail protejat]: ~ $ python
Python 2.7.16 (implicit, 7 octombrie 2019, 17:36:04)
[GCC 8.3.0] pe linux2

Tastați „ajutor”, „drepturi de autor”, „credite” sau „licență” pentru mai multe informații.

// importați biblioteca SMTP
>>> import smtplib
// conectați-vă la serverul GMAIL cu numele domeniului și numărul portului (Această setare diferă pentru
fiecare furnizor de e-mail, vă rugăm să aruncați o privire la tabelul de mai jos)
>>> mailobj = smtplib.SMTP ('smtp.gmail.com., 587)
// salută serverul
>>> mailobj.ehlo ()
(250, 'smtp.gmail.com la dispoziția dumneavoastră, [103.255.4.246] \ nDIMENSIUNE35882577 \ n8BITMIME \ nSTARTTLS \
nENHANCEDSTATUSCODES \ nPIPELINING \ nCHUNKING \ nSMTPUTF8 ')
// Portul 587 înseamnă că folosim conexiunea TLS criptată, deci porniți TLS criptat
comunicare folosind starttls (), astfel încât acreditările și mesajele noastre să nu fie adulmecate
>>> mailobj.starttls ()
(220, '2.0.0 Gata pentru a începe TLS ')
// conectați-vă la contul dvs. GMAIL utilizând adresa de e-mail și parola
>>> mailobj.login ('[e-mail protejat]', 's3cr3t_p4ssw0rd')
(235, '2.7.0 Acceptat ')
// specificați adresa de e-mail și conținutul e-mail al expeditorului și destinatarului
>>> mailobj.sendmail ('[email protected]', '[email protected]', 'Subiect:
Salut Lume! \ n Bună ziua lume! acesta este primul meu e-mail Hello World în Python ')

// închideți conexiunea la serverul GMAIL
>>> mailobj.părăsi()
(221, '2.0.0 conexiune de închidere b6sm4519863lfi.72 - gsmtp ')

În exemplul de program de mai sus, înlocuiți conținutul dat cu al dvs. Dacă nu sunteți utilizator GMAIL, puteți utiliza serverul de e-mail al furnizorului dvs. Iată lista Numelor de domeniu și a porturilor unor furnizori de e-mail obișnuiți.

Nume Nume domeniu server Port
Gmail smtp.gmail.com 587
Outlook / Hotmail smtp-mail.perspectivă.com 587
Yahoo Mail smtp.Poștă.yahoo.com 587
Verizon smtp.verizon.net 465
Comcast smtp.comcast.net 587

Câteva cuvinte despre IMAP

Așa că tocmai am studiat că SMTP este folosit pentru a trimite e-mailuri, dar pentru ce este IMAP (Internet Access Messaging Protocol)? SMTP nu poate fi folosit pentru a căuta și a primi e-mailuri de pe server, protocolul IMAP sau POP3 este utilizat în acest scop.

IMAPCLIENT, IMAPLIB și PYZMAIL

Există două biblioteci majore în Python care pot fi utilizate ca client IMAP pentru a găsi, prelua și șterge e-mailuri de pe serverul de e-mail. Python are implicit imaplib bibliotecă, dar o altă bibliotecă externă imapclient este mai eficient și mai ușor de utilizat. În acest tutorial vom folosi imapclient pentru a prelua e-mailuri de pe serverul de mail.

Problema cu imapclient este că preia e-mailurile de pe serverul de e-mail în format brut. Deci, vom avea nevoie pyzmail bibliotecă ca analizor pentru ieșire ușor de utilizat. Pentru a instala ambele biblioteci, tastați

[e-mail protejat]: ~ $ sudo pip instalare imapclient
[e-mail protejat]: ~ $ sudo pip instalează pyzmail

Obținerea e-mailurilor de pe serverul de e-mail

Acum, vom învăța cum să căutăm și să descărcăm e-mail de pe serverul de e-mail folosind imapclient. Vom folosi imapclient pentru a căuta și descărca e-mailuri de pe server, apoi vom folosi pyzmail pentru a analiza acest conținut brut. Haideți

// import biblioteca imapclient
>>> import imapclient
// Conectați-vă la serverul IMAP al GMAIL
>>> obj = imapclient.IMAPClient („imap.gmail.com ', ssl = Adevărat)
// Conectați-vă la contul dvs. de e-mail folosind acreditările dvs
>>> obiect.autentificare ('[email protected]', 's3cr4tp4ss')
„[e-mail protejat] autentificat (succes)”
// Selectați folderul de mesaje pentru a citi i.e CUTIE, PROIECTE, TRIMITE mesaje
>>> obiect.select_folder ('INBOX', readonly = True)
'EXISTS': 830, 'PERMANENTFLAGS': (), 'HIGHESTMODSEQ': 112999, 'UIDNEXT': 931,
'FLAGS': ('\\ Răspuns', '\\ Semnalat', '\\ Proiect', '\\ Șters', '\\ Văzut',
'$ NotPhishing', '$ Phishing'), 'UIDVALIDITY': 1, 'READ-ONLY': ["], 'RECENT': 0
// Căutați mesajele în INBOX sau aplicați un filtru, sub filtru se va afișa
dvs. e-mailurile primite după 25-oct-2019
>>> mail_ids = obj.căutare (['ÎNCEPUT', '25 -Oct-2019 '])
>>> mail_ids
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
// Lista „mail_ids” conține o listă de ID-uri de e-mail primite începând cu 25 octombrie 2019,
puteți descărca un e-mail utilizând funcția de preluare imapclient.
>>> raw_mail = obj.preluați ([919], ['BODY []', 'FLAGS'])
// Acum, conținutul din variabila raw_mail este în format brut, nu poate fi afișat pe
ecranul direct, așa că am avea nevoie de un analizor pentru a analiza acest conținut pentru o ieșire ușor de utilizat
>>> import pyzmail
>>> mesaj = pyzmail.PyzMessage.factory (raw_mail [919] ['BODY []'])
// Acum e-mailul este analizat și stocat în variabila mesaj, pentru a obține subiectul
e-mail, utilizați funcția get_subject
>>> mesaj.get_subject ()
Îți îmbraci abilitățile în acest Halloween cu 25% reducere
// În mod similar, puteți vedea detaliile expeditorului
>>> mesaj.get_addresses ('de la')
[(u'Usama Azad ',' [email protected] ')]
>>> mesaj.get_addresses ('către')
[(u '[email protected]', '[email protected]')]
// Pentru a obține corpul e-mailului, tastați
>>> mesaj.text_part.get_payload ().decodifica (mesaj.text_part.set de caractere)
u ”Bună! Bucurați-vă de 25% la cursurile noastre premium ”

Dacă aveți un cont la un alt furnizor de servicii de e-mail, altul decât GMAIL, vă puteți conecta la serverul IMAP al acestora. Iată lista de nume de domenii IMAP a unor furnizori de e-mail celebri.

Furnizor Nume domeniu pentru serverul IMAP
YAHOO imap.Poștă.yahoo.com
Hotmail / Outlook imap-mail.perspectivă.com
Verizon de intrare.verizon.net
Comcast imap.comcast.net
AT&T imap.Poștă.at.net

Ștergerea e-mailului de pe serverul IMAP

Similar cu căutarea și preluarea e-mailurilor de pe server, puteți șterge e-mailuri de pe serverul dvs. de e-mail folosind uid-ul lor. Doar urmați pașii dați

// Pentru a șterge un e-mail, trebuie să transformați numai citirea în „False” pentru a obține acces la scriere la
e-mailuri
>>> obiect.select_folder ('INBOX', readonly = False)
>>> mail_ids = obj.căutare (['ÎNCEPUT', '25 -Oct-2019 '])
>>> mail_ids
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
 
// Furnizați un uid de e-mail sau o listă de uide de e-mail, după ce ați rulat sub comanda,
e-mailul dvs. va dispărea din INBOX.
>>> obiect.delete_messages (919)
919: ('\\ Văzut', '\\ Șters')
 
// Această comandă vă va șterge definitiv e-mailurile de pe serverul Mail
>>> obiect.expune ()
(„Succes”, [])

https: // techtopz.com / build-a-birthday-reminder-application-in-python-on-mac /

Creează-ți propriul memento de ziua ta

Ai zile de naștere ale prietenilor tăi în lunile următoare și vrei să le urezi ziua lor de naștere. Dar aveți multă muncă în biroul dvs. și există posibilitatea să uitați să le doriți. Deci, această sarcină poate fi efectuată automat folosind python. Următorul este codul pentru a efectua această sarcină.

// importul modulelor
import re
// modulul os este utilizat pentru efectuarea sarcinilor sistemului de operare i.accesarea directoriilor
import os
import datetime
import smtplib
 
// definirea unei funcții care va trimite e-mailuri
def send_mail (adresă_recipient_mail, nume):
sender_mail_address = "[e-mail protejat]"
passwd = "senderPasswd"
// conectarea la serverul Gmail cu numele de domeniu și numărul portului
obj = smtplib.SMTP ('smtp.gmail.com., 587)
obiect.ehlo ()
obiect.starttls ()
// conectarea la contul dvs. Gmail
obiect.autentificare (adresa expeditor_mail_, parolă)
// trimiterea e-mailului către „reciever_mail_address”.
obiect.sendmail (sender_mail_address, reciever_mail_address, "Subject: BirthDay Wishing Mail \ n \ n HappyBirthday" + nume)
// încheierea conexiunii
obiect.părăsi()
// Corpul principal
// accesați directorul în care este prezent fișierul care conține date
os.chdir („path_to_birthday_data_file”)
în timp ce 1:
// obținerea datei și orei momentului prezent
today = datetime.datetime.azi()
today = str (today)
// obținerea anului curent, lună, zi, oră, minut și secundă
current_year = today [0: 4]
current_month = today [5: 7]
current_day = today [8:10]
ora_curenta = azi [11:13]
minute_curent = astăzi [14:16]
current_sec = today [17:19]
// deschiderea fișierului de ziua de naștere în obiectul „fișier_de ziua de naștere” în modul de citire
fișier_de ziua_nunțului = deschis ('fișier_de_aniversare', 'r')
// salvarea tuturor liniilor „fișier_niversare” în lista de linii
lines = fișier_de ziua de naștere.readlines ()
// închiderea obiectului „fișier_aniversare”
fișier_de ziua de naștere.închide()
// citirea fiecărei linii folosind bucla for
pentru linie în linii:
// a face o expresie regulată pentru a găsi o dată în „fișierul_de ziua”
dateEx = re.compilați (r "\ d 4 - \ d 2 - \ d 2")
findDate = dateEx.căutare (linie)
data = findDate.grup()
// obținerea lunii de naștere și ziua de naștere din fișier
ziua_nunțului = data [5: 7]
ziua_nasterii = data [8:10]
// realizarea unei expresii regulate pentru a găsi adresa de e-mail din fișierul_de ziua de naștere
mailEx = re.compilați (r "\ w * @ \ w *.com ")
findMail = mailEx.căutare (linie)
reciever_mail = findMail.grup()
// făcând o expresie regulată pentru a găsi numele persoanei
numeEx = re.compila (r "\ w *")
findName = nameEx.căutare (linie)
nume = findName.grup()
// verificarea dacă vine sau nu ziua de naștere a cuiva
dacă current_month == birthday_month și = current_day == birthday_day:
// trimiterea e-mailului la ora 08:00
dacă current_hour == '08' și current_minute == '00' și current_sec == '00':
// apelarea funcției „send_mail”
send_mail (destinatar_mail, nume)

Acum facem un „fișier_de ziua_numirii”, în care salvăm nume, adrese de e-mail și data lor de naștere. Acesta este un fișier text simplu și arată astfel.

Explicaţie

Vom citi acest fișier folosind scriptul Python și vom verifica a cui aniversare vine și le dorim. În primul rând vom importa câteva module. Modulul DATETIME are funcții care ne oferă data și ora curente și multe altele. Dar vom folosi acest lucru doar pentru a găsi data și ora curente. Modulul SMTPLIB este utilizat pentru a trimite e-mailuri și a fost explicat mai sus. Modulul RE are funcții care sunt utilizate pentru a găsi expresii regulate dintr-un șir.

În acest script, definim funcția „send_mail”, care trimite e-mail către „reciever_mail_address”, al cărui nume este „name”. Ambele argumente sunt transmise funcției din corpul principal al msg. În corpul principal al scriptului vom vedea cum găsim „reciever_mail_address” și „name”.

Trimiterea e-mailurilor folosind smtplib a fost explicată mai sus, astfel încât să o puteți citi și nu va fi discutată aici.

În corpul principal, mergem la directorul în care am salvat „fișier_niversare” folosind „os”.chdir () '. Apoi avem o „buclă while”, care este întotdeauna adevărată, astfel încât va verifica ziua de naștere continuu. Acum primim data și ora curente și le salvăm în variabila „astăzi”. Arată așa.

01.11.2019 16:19:07.144925

Vom extrage an, lună, zi, oră, minute și secunde folosind indicii acestor cantități. După aceasta, vom deschide birthday_file într-un obiect „birthday_file” în modul de citire, astfel încât să îl putem citi doar. Acum vom salva toate liniile acestui fișier în lista de linii. 'fișier_de ziua de naștere.readlines () 'va salva fiecare linie în lista' linii '. După aceasta, vom închide fișierul_niversare folosind 'fișierul_aniversare.funcția close () '.

Acum vom citi fiecare rând unul câte unul folosind bucla for. În fiecare linie, datele unei singure persoane sunt disponibile în „fișier_de ziua_numirii”, așa că citim datele unei singure persoane simultan în această buclă.

După aceasta, vom extrage Data nașterii, adresa de e-mail și numele persoanei folosind modulul RE. După cum am scris data în formatul următor

AAAA-LL-ZZ

Deci vom face o expresie regulată „dateEx” care găsește acest format în linie.

re.compilați (r ”\ d 4 - \ d 2 - \ d 2”)

Comanda de mai sus găsește un șir care are '4 cifre' urmat de '-' apoi '2 cifre' urmat de '-' și '2 cifre'. Acest lucru ne va oferi data nașterii persoanei, astfel încât să extragem nașterea_ zi și nașterea_ lună din această expresie.

În mod similar, vom găsi adresa de e-mail folosind expresii regulate. După aceasta, vom compara ziua_nunții și luna_curentă și ziua_aniversării și ziua_curentă. Dacă aceste condiții sunt îndeplinite, vom trimite e-mailul de ziua de naștere utilizând funcția „send_mail” exact la „08:00”.

Rularea automată a scriptului prin Cronjob

Acum ne vom asigura că acest script python rulează de fiecare dată. Pentru a face acest lucru, vom adăuga această sarcină la crontab. Crontab, în ​​linux, este folosit pentru a efectua sarcini în mod automat. Ceea ce trebuie să facem este să adăugăm sarcina la crontab. Pentru a face acest lucru, urmați pașii dați.

  1. Deschideți crontab pentru a adăuga sarcina în terminalul dvs. folosind următoarea comandă
[e-mail protejat]: ~ $ crontab -e
  1. La sfârșitul acestui fișier introduceți următoarea comandă fără #
@ reporniți python path_to_the_script

Comenzile de mai sus vă vor permite sistemului să ruleze scriptul python de fiecare dată când reporniți sistemul. În acest fel, sistemul dvs. va rula scriptul python de fiecare dată când sistemul dvs. este pornit.

How to download and Play Sid Meier's Civilization VI on Linux
Introduction to the game Civilization 6 is a modern take on the classic concept introduced in the series of the Age of Empires games. The idea was fai...
How to Install and Play Doom on Linux
Introduction to Doom The Doom Series originated in the 90s after the release of the original Doom. It was an instant hit and from that time onwards th...
Vulkan for Linux Users
With each new generation of graphics cards, we see game developers push the limits of graphical fidelity and come one step closer to photorealism. But...