Python

Afsendelse af e-mails med Python

Afsendelse af e-mails med Python
Afsendelse, kontrol og besvarelse af e-mails er en tidskrævende opgave, især når du gør det for et stort antal mennesker eller kunder, hvor du bare skal ændre modtagerens navn, adresse, alder og andre små ting. Det ville være en meget vanskelig opgave for dig at skrive et program, der kunne håndtere alle typer af dine personlige / forretningsmails, men stadig kan du automatisere en masse ting i denne henseende, hvilket i sidste ende vil spare dig for meget tid.

For eksempel vil du sende en påmindelse til dine kunder om deres resterende regninger, og du har alle kunderelaterede data som deres telefonnumre, adresse, alder osv. I et Excel-ark eller en database, så i stedet for at gøre det manuelt kan du skrive simpelt program i Python til automatisk at gøre det for dig. I denne vejledning lærer vi, hvordan e-mail-protokol fungerer, og hvordan du kan automatisere processen for at spare din dyrebare tid.

Et ord om SMTP

Simple Mail Transfer Protocol (SMTP) er edb svarende til din posttjeneste. Det er en protokol, der fungerer på applikationslaget i et TCP / IP-netværk. Det er en standardprotokol til afsendelse og modtagelse af e-mails over internettet. Mailoverførselsprocessen består af e-mail-servere og klienter, der sender og modtager e-mails til hinanden.

For eksempel har du en GMAIL-konto, og du vil sende en e-mail til din ven på hans YAHOO-konto. Du skriver en e-mail og trykker på send, men backend-processen er lidt kompliceret, og for at forstå denne proces skal du først forstå SMTP. Din SMTP-e-mail-klient sender først HELO (eller EHLO) til GMAIL-serveren, kan du sige, at denne kommando eller overskrift svarer til Vært header i HTTP-protokol og bruges til at identificere serveren ved hjælp af domænenavn. Efter HELO eller EHLO godkender klienten sig selv til serveren med det givne brugernavn og adgangskode ved hjælp af AUTH kommando. Derefter specificeres afsender- og modtagerens e-mail-adresse og derefter meddelelsesteksten og sender e-mail til GMAIL Server. GMAIL-serveren vil først bekræfte, at uanset om modtagerens e-mail-adresse på YAHOO eksisterer eller ej, vil den derefter sende e-mailen til YAHOO Server, hvor modtageren kan hente sine e-mails fra.

SMTPLIB

SMTPLIB er et pythonbibliotek, der kan bruges som en SMTP-klient ligesom din GMAIL, YAHOO, Thunderbird eller enhver anden e-mail-klient og kan bruges til at sende e-mails. Vi kan udføre alle opgaver ved hjælp af SMTPLIB-klienten, som vi kan udføre med dem, der har grafisk brugergrænseflade.

Det kommer som standard i Python, hvis du ikke har det, kan du installere ved hjælp af følgende kommando.

[e-mail-beskyttet]: ~ $ pip install smtplib

ELLER i Python3

[e-mail-beskyttet]: ~ $ pip install smtplib

Skriv din første e-mail med Python

I denne vejledning bruger jeg en GMAIL-konto som afsender, og jeg bruger også Python-konsol, så det bliver lettere for mig at forklare hver linie kode trin for trin. For at komme i gang er vi nødt til at give vores GMAIL adgang til mindre sikre apps.

Så log ind på din GMAIL-konto, og gå derefter til kontoindstillinger.

Sørg nu for, at adgang til mindre sikre apps er slået til.

Åbn nu din python-konsol, og start med at skrive din første e-mail ved hjælp af Python

[e-mail-beskyttet]: ~ $ python
Python 2.7.16 (standard, 7. okt 2019, 17:36:04)
[GCC 8.3.0] på linux2

Skriv “hjælp”, “ophavsret”, “kreditter” eller “licens” for at få flere oplysninger.

// importer SMTP-biblioteket
>>> import smtplib
// Opret forbindelse til GMAIL-serveren med domænenavn og portnummer (Denne indstilling er forskellig for
hver e-mail-udbyder, se venligst tabellen nedenfor)
>>> mailobj = smtplib.SMTP ('smtp.gmail.com ', 587)
// sige hej til serveren
>>> mailobj.ehlo ()
(250, 'smtp.gmail.com til din tjeneste, [103.255.4.246] \ nStørrelse35882577 \ n8BITMIME \ nSTARTTLS \
nENHANCEDSTATUSCODES \ nPIPELINING \ nCHUNKING \ nSMTPUTF8 ')
// Port 587 betyder, at vi bruger krypteret TLS-forbindelse, så start krypteret TLS
kommunikation ved hjælp af starttls (), så vores legitimationsoplysninger og meddelelser ikke bliver snuset
>>> mailobj.starttls ()
(220, '2.0.0 Klar til at starte TLS ')
// log ind på din GMAIL-konto ved hjælp af e-mail og adgangskode
>>> mailobj.login ('[email protected]', 's3cr3t_p4ssw0rd')
(235, '2.7.0 accepteret ')
// angiv afsender og modtageres e-mail-adresse og e-mail-indhold
>>> mailobj.sendmail ('[email protected]', '[email protected]', 'Subject:
Hej Verden! \ n Hej verden! dette er min første hej verdens e-mail i Python ')

// tæt forbindelse til GMAIL-serveren
>>> mailobj.Afslut()
(221, '2.0.0 lukkeforbindelse b6sm4519863lfi.72 - gsmtp ')

I ovenstående eksempelprogram skal du erstatte det givne indhold med dit eget. Hvis du ikke er en GMAIL-bruger, kan du bruge din udbyders e-mail-server. Her er listen over domænenavne og porte til nogle almindelige mailudbydere.

Navn Serverdomænenavn Havn
Gmail smtp.gmail.com 587
Outlook / Hotmail smtp-mail.udsigter.com 587
YAHOO Mail smtp.post.yahoo.com 587
Verizon smtp.verizon.net 465
Comcast smtp.comcast.net 587

Nogle ord om IMAP

Så vi har lige undersøgt, at SMTP bruges til at sende e-mails, men hvad er IMAP (Internet Access Messaging Protocol) til? SMTP kan ikke bruges til at søge og få e-mails fra serveren, IMAP eller POP3-protokol bruges til dette formål.

IMAPCLIENT, IMAPLIB og PYZMAIL

Der er to store biblioteker i Python, der kan bruges som en IMAP-klient til at finde, hente og slette e-mails fra mailserveren. Python har standard imaplib bibliotek, men et andet eksternt bibliotek imapclient er mere effektiv og nem at bruge. I denne vejledning bruger vi imapclient for at hente e-mails fra mailserveren.

Problemet med imapclient er, at den henter e-mails fra mailserveren i råformat. Så vi får brug for det pyzmail bibliotek som en parser til brugervenlig output. For at installere begge biblioteker skal du skrive

[e-mail beskyttet]: ~ $ sudo pip install imapclient
[e-mail-beskyttet]: ~ $ sudo pip installer pyzmail

Få dine e-mails fra Mail Server

Nu lærer vi at søge og downloade e-mail fra mailserveren ved hjælp af imapclient. Vi bruger imapclient til at søge og downloade e-mails fra serveren, så bruger vi pyzmail til at analysere dette rå indhold. Lad os

// import imapclient-bibliotek
>>> import imapclient
// Opret forbindelse til GMAILs IMAP-server
>>> obj = imapclient.IMAPClient ('imap.gmail.com ', ssl = Sandt)
// Log ind på din e-mail-konto ved hjælp af dine legitimationsoplysninger
>>> obj.login ('[email protected]', 's3cr4tp4ss')
'[email protected] godkendt (Succes)'
// Vælg beskedmappe, der skal læses i.e INBOX, UDKAST, AFSENDT mails
>>> obj.select_folder ('INBOX', readonly = True)
'EXISTS': 830, 'PERMANENTFLAGS': (), 'HIGHESTMODSEQ': 112999, 'UIDNEXT': 931,
'FLAGS': ('\\ Answered', '\\ Flagged', '\\ Draft', '\\ Deleted', '\\ Seen',
'$ NotPhishing', '$ Phishing'), 'UIDVALIDITY': 1, 'LÆS KUN': ["], 'RECENT': 0
// Søg i dine beskeder i din INBOX, eller anvend et filter, nedenunder vises filteret
dig de mails, der er modtaget efter den 25.-oktober-2019
>>> mail_ids = obj.søg (['SINCE', '25 -Oct-2019 '])
>>> mail_id
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
// Listen "mail_ids" indeholder en liste over e-mail-id'er, der er modtaget siden 25.-oktober-2019,
du kan downloade en e-mail ved hjælp af imapclient-hentningsfunktionen.
>>> raw_mail = obj.hente ([919], ['BODY []', 'FLAGS'])
// Nu er indholdet i raw_mail-variablen i råformat, det kan ikke vises på
skærm direkte, så vi ville have brug for en parser for at analysere dette indhold for en brugervenlig output
>>> importer pyzmail
>>> besked = pyzmail.PyzMessage.fabrik (raw_mail [919] ['BODY []'])
// Nu e-mailes og lagres i meddelelsesvariablen for at få emnet for
e-mailen, brug get_subject-funktionen
>>> besked.get_subject ()
u'Klæd dine færdigheder til denne Halloween med 25% rabat '
// På samme måde kan du se afsenderoplysninger
>>> besked.get_addresses ('fra')
[(u'Usama Azad ',' [email protected] ']]
>>> besked.get_adresser ('til')
[(u '[email protected]', '[email protected]']]
// For at hente brødteksten i e-mailen skal du skrive
>>> besked.tekstdel.get_payload ().afkode (besked.tekstdel.tegnsæt)
u ”Hej! Nyd flade 25% på vores premium kurser ”

Hvis du har en konto hos en anden udbyder af e-mail-tjenester end GMAIL, kan du logge ind på deres IMAP-server. Her er listen over IMAP-domænenavne over nogle berømte mailudbydere.

Udbyder Domænenavn til IMAP Server
YAHOO imap.post.yahoo.com
Hotmail / Outlook imap-mail.udsigter.com
Verizon indgående.verizon.net
Comcast imap.comcast.net
AT&T imap.post.att.net

Sletning af din e-mail fra IMAP Server

Svarende til søgning og hentning af e-mails fra serveren kan du også slette e-mails fra din mailserver ved hjælp af deres uid. Følg bare de givne trin

// For at slette en e-mail er du nødt til at slå skrivebeskyttet til 'Falsk' for at få skriveadgang til din
e-mails
>>> obj.select_folder ('INBOX', readonly = False)
>>> mail_ids = obj.søg (['SINCE', '25 -Oct-2019 '])
>>> mail_id
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
 
// Giv en e-mail-uid eller en liste over e-mail-uids efter at have kørt under kommandoen,
din e-mail forsvinder fra INBOX.
>>> obj.delete_messages (919)
919: ('\\ Set', '\\ Slettet')
 
// Denne kommando sletter dine e-mails permanent fra mailserveren
>>> obj.fjerne ()
('Succes', [])

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

Lav din egen fødselsdagspåmindelse

Du har fødselsdage for dine venner i de kommende måneder, og du vil ønske dem på deres fødselsdage. Men du har meget arbejde på dit kontor, og der er en mulighed for, at du glemmer at ønske dem. Så denne opgave kan udføres automatisk ved hjælp af python. Følgende er koden til at udføre denne opgave.

// import af moduler
import gen
// os-modulet bruges til at udføre operativsystemopgaver i.e adgang til kataloger
importer os
importer datatid
importer smtplib
 
// definerer en funktion, der sender e-mails
def send_mail (modtager_mail_adresse, navn):
sender_mail_address = "[e-mail-beskyttet]"
passwd = "senderPasswd"
// opretter forbindelse til gmail-server med domænenavn og portnummer
obj = smtplib.SMTP ('smtp.gmail.com ', 587)
obj.ehlo ()
obj.starttls ()
// logger ind på din gmail-konto
obj.login (sender_mail_adresse, passwd)
// sende mail til 'reciever_mail_address'.
obj.sendmail (sender_mail_adresse, modtager_mail_adresse, "Emne: BirthDay Wishing Mail \ n \ n HappyBirthday" + navn)
// afslutter forbindelse
obj.Afslut()
// Hovedlegeme
// gå til den mappe, hvor filen indeholdende data er til stede
os.chdir ("sti_til_fødselsdag_data_fil")
mens 1:
// får dato og klokkeslæt for nuværende øjeblik
i dag = datetime.dato tid.i dag()
i dag = str (i dag)
// får det aktuelle år, måned, dag, time, minut og sekund
nuværende_år = i dag [0: 4]
current_month = i dag [5: 7]
nuværende_dag = i dag [8:10]
current_hour = i dag [11:13]
current_minute = i dag [14:16]
current_sec = i dag [17:19]
// åbning af fødselsdagsfil i 'birthday_file' -objekt i læsetilstand
fødselsdag_fil = åben ('fødselsdag_fil', 'r')
// gemme alle linjerne i 'fødselsdag_fil' i linielisten
linjer = fødselsdagsfil.readlines ()
// lukning af 'fødselsdag_fil' -objekt
fødselsdag_fil.tæt()
// læser hver linje ved hjælp af for loop
for linje i linjer:
// gør et regelmæssigt udtryk for at finde en dato i 'fødselsdag_fil'
dateEx = re.kompilere (r "\ d 4 - \ d 2 - \ d 2")
findDate = dateEx.søg (linje)
dato = findDate.gruppe()
// får fødselsdag_måned og fødselsdag_dag fra filen
fødselsdag_måned = dato [5: 7]
fødselsdag_dag = dato [8:10]
// laver et regelmæssigt udtryk for at finde e-mail-adresse fra fødselsdag_fil
mailEx = re.kompilere (r "\ w * @ \ w *.com ")
findMail = mailEx.søg (linje)
reciever_mail = findMail.gruppe()
// gør et regelmæssigt udtryk for at finde navnet på personen
nameEx = re.kompilere (r "\ w *")
findName = nameEx.søg (linje)
navn = find navn.gruppe()
// kontrollere, om nogens fødselsdag kommer eller ej
hvis nuværende_måned == fødselsdag_måned og = aktuel_dag == fødselsdag_dag:
// sende mail nøjagtigt kl. 08:00
hvis current_hour == '08' og current_minute == '00' og current_sec == '00':
// kalder 'send_mail' funktion
send_mail (modtager_mail, navn)

Nu laver vi en 'fødselsdagsfil', hvor vi gemmer navne, e-mail-adresser og deres fødselsdato. Dette er en simpel tekstfil og ser sådan ud.

Forklaring

Vi læser denne fil ved hjælp af python-script og kontrollerer, hvis fødselsdag kommer og ønsker dem. Først og fremmest importerer vi nogle moduler. DATETIME-modulet har funktioner, der giver os aktuel dato og tid og mange flere. Men vi bruger kun dette til at finde den aktuelle dato og tid. SMTPLIB-modulet bruges til at sende mail og er forklaret ovenfor. RE-modulet har funktioner, der bruges til at finde regulært udtryk fra en streng.

I dette script definerer vi 'send_mail' funktion, der sender mail til 'reciever_mail_address', hvis navn er 'name'. Begge argumenter videregives til funktionen fra msg. I scriptets hoveddel vil vi se, hvordan vi finder 'reciever_mail_address' og 'name'.

Afsendelse af e-mail ved hjælp af smtplib er forklaret ovenfor, så du kan læse den, og den vil ikke blive diskuteret her.

I hoveddelen går vi til den mappe, hvor vi har gemt 'birthday_file' ved hjælp af 'os.chdir () '. Så har vi en 'while-loop', som altid er sand, så den kontrollerer fødselsdagen kontinuerligt. Nu får vi aktuel dato og tid og gemmer det i 'i dag' variabel. Det ser sådan ud.

2019-11-01 16:19:07.144925

Vi udtrækker år, måned, dag, time, minutter og sekunder ved hjælp af indekser for disse mængder. Efter dette åbner vi fødselsdag_fil i et objekt 'fødselsdag_fil' i læsetilstand, så vi kan kun læse det. Nu gemmer vi alle linjerne i denne fil i linielisten. 'fødselsdag_fil.readlines () 'gemmer hver linje i' linjer 'listen. Herefter lukker vi fødselsdag_fil ved hjælp af 'fødselsdag_fil.luk () 'funktion.

Nu læser vi hver linje en efter en ved hjælp af for loop. I hver linje er kun én persons data tilgængelige i 'fødselsdag_fil', så vi læser kun én persons data ad gangen i denne sløjfe.

Herefter udtrækker vi fødselsdato, e-mail-adresse og navn på den person, der bruger RE-modulet. Som vi har skrevet datoen i følgende format

ÅÅÅÅ-MM-DD

Så vi laver et regulært udtryk 'dateEx', der finder dette format i linjen.

re.kompilere (r ”\ d 4 - \ d 2 - \ d 2”)

Ovenstående kommando finder en streng, der har '4 cifre' efterfulgt af '-' derefter '2 cifre' efterfulgt af '-' og '2 cifre'. Dette giver os personens fødselsdato, så vi udtrækker fødselsdag og fødselsdag fra dette udtryk.

På samme måde finder vi e-mail-adresse ved hjælp af regulære udtryk. Herefter sammenligner vi fødselsdag_måned og nuværende_måned og fødselsdag_dag og nuværende_dag. Hvis disse betingelser er opfyldt, sender vi fødselsdagens e-mail ved hjælp af 'send_mail' -funktionen nøjagtigt '08: 00 '.

Kører script automatisk via Cronjob

Nu sørger vi for, at dette python-script kører hver gang. For at gøre dette vil vi føje denne opgave til crontab. Crontab, i linux, bruges til at udføre opgaver automatisk. Hvad vi skal gøre er bare at tilføje opgaven til crontab. For at gøre det skal du følge de givne trin.

  1. Åbn crontab for at tilføje opgave i din terminal ved hjælp af følgende kommando
[e-mail-beskyttet]: ~ $ crontab -e
  1. I slutningen af ​​denne fil skal du indtaste følgende kommando uden #
@reboot python sti_to_the_script

Ovenstående kommandoer gør det muligt for dit system at køre python-scriptet hver gang du genstarter dit system. På denne måde kører dit system python-script hver gang når dit system er tændt.

Kamp om Wesnoth 1.13.6 Udvikling frigivet
Kamp om Wesnoth 1.13.6 udgivet i sidste måned, er den sjette udviklingsudgivelse i 1.13.x-serien, og den leverer en række forbedringer, især til bruge...
Sådan installeres League Of Legends på Ubuntu 14.04
Hvis du er fan af League of Legends, er dette en mulighed for dig at prøvekøre League of Legends. Bemærk, at LOL understøttes på PlayOnLinux, hvis du ...
Installer det nyeste OpenRA-strategispil på Ubuntu Linux
OpenRA er en Libre / Free Real Time Strategy-spilmotor, der genskaber de tidlige Westwood-spil som det klassiske Command & Conquer: Red Alert. Distrib...