Python

Sende e-post med Python

Sende e-post med Python
Å sende, sjekke og svare på e-post er en tidkrevende oppgave, spesielt når du gjør det for et stort antall mennesker eller kunder der du bare må endre mottakerens navn, adresse, alder og andre små ting. Det ville være en veldig vanskelig oppgave for deg å skrive et program som kan håndtere alle typer personlige / forretningsmessige e-postmeldinger, men likevel kan du automatisere mange ting i denne forbindelse som til slutt vil spare deg for mye tid.

For eksempel vil du sende en påminnelse til kundene dine om gjenværende regninger, og du har alle kunderelaterte data som telefonnummer, adresse, alder osv. I et Excel-ark eller en database, og i stedet for å gjøre det manuelt kan du skrive en enkelt program i Python for automatisk å gjøre det for deg. I denne opplæringen lærer vi hvordan e-postprotokollen fungerer og hvordan du kan automatisere prosessen for å spare dyrebar tid.

Et ord om SMTP

Simple Mail Transfer Protocol (SMTP) tilsvarer datastyringen din posttjeneste. Det er en protokoll som fungerer på applikasjonslaget i et TCP / IP-nettverk. Det er en standard protokoll for sending og mottak av e-post via internett. Postoverføringsprosessen består av e-postservere og klienter som sender og mottar e-post til hverandre.

For eksempel har du en GMAIL-konto, og du vil sende en e-post til vennen din på hans YAHOO-konto. Du skriver en e-post og trykker send, men backend-prosessen er litt komplisert, og for å forstå denne prosessen, må du først forstå SMTP. SMTP-e-postklienten din sendes først HELO (eller EHLO) til GMAIL-serveren, kan du si at denne kommandoen eller overskriften tilsvarer Vert header i HTTP-protokoll og brukes til å identifisere serveren ved hjelp av domenenavn. Etter HELO eller EHLO autentiserer klienten seg mot serveren med det gitte brukernavnet og passordet ved hjelp av AUTH kommando. Deretter spesifiserer den avsender- og mottakerens e-postadresse og deretter meldingsteksten og sender e-post til GMAIL-serveren. GMAIL-serveren vil først bekrefte at om mottakerens e-postadresse på YAHOO eksisterer eller ikke, vil den sende e-posten til YAHOO Server der mottakeren kan hente e-postene sine fra.

SMTPLIB

SMTPLIB er et pythonbibliotek som kan brukes som en SMTP-klient akkurat som din GMAIL, YAHOO, Thunderbird eller en hvilken som helst annen e-postklient, og som kan brukes til å sende e-post. Vi kan utføre alle oppgaver ved hjelp av SMTPLIB-klienten som vi kan gjøre med de som har grafisk brukergrensesnitt.

Det kommer som standard i Python, hvis du ikke har det, kan du installere ved hjelp av følgende kommando.

[e-postbeskyttet]: ~ $ pip install smtplib

ELLER i Python3

[e-postbeskyttet]: ~ $ pip install smtplib

Skrive din første e-post med Python

I denne opplæringen vil jeg bruke en GMAIL-konto som avsender, og jeg vil også bruke Python-konsollen, så det blir lettere for meg å forklare hver linje med kode trinn for trinn. For å komme i gang må vi gi GMAIL tilgang til mindre sikre apper.

Så logg inn på GMAIL-kontoen din, og gå deretter til kontoinnstillingene.

Forsikre deg nå om at tilgang for mindre sikre apper er slått på.

Åpne nå python-konsollen og begynn å skrive din første e-postmelding ved hjelp av Python

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

Skriv inn “help”, “copyright”, “credits” eller “lisens” for mer informasjon.

// importer SMTP-biblioteket
>>> importer smtplib
// koble til GMAIL Server med domenenavn og portnummer (Denne innstillingen er forskjellig fra
hver e-postleverandør, ta en titt på tabellen nedenfor)
>>> mailobj = smtplib.SMTP ('smtp.gmail.com ', 587)
// si hei 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 betyr at vi bruker kryptert TLS-tilkobling, så start kryptert TLS
kommunikasjon ved hjelp av starttls (), slik at vår legitimasjon og meldinger ikke blir snuset
>>> mailobj.starttls ()
(220, '2.0.0 Klar til å starte TLS ')
// logg inn på GMAIL-kontoen din ved hjelp av e-post og passord
>>> mailobj.pålogging ('[email protected]', 's3cr3t_p4ssw0rd')
(235, '2.7.0 akseptert ')
// spesifiser avsender og mottakeres e-postadresse og e-postinnhold
>>> mailobj.sendmail ('[email protected]', '[email protected]', 'Subject:
Hei Verden! \ n Hei verden! dette er min første hei verdens e-post i Python ')

// tett forbindelse til GMAIL-serveren
>>> mailobj.slutte()
(221, '2.0.0 lukkingstilkobling b6sm4519863lfi.72 - gsmtp ')

I eksempelprogrammet ovenfor erstatter du gitt innhold med ditt eget. Hvis du ikke er en GMAIL-bruker, kan du bruke e-postserveren til leverandøren din. Her er listen over domenenavn og porter til noen vanlige e-postleverandører.

Navn Server domenenavn Havn
Gmail smtp.gmail.com 587
Outlook / Hotmail smtp-mail.Outlook.com 587
YAHOO Mail smtp.post.yahoo.com 587
Verizon smtp.verizon.nett 465
Comcast smtp.comcast.nett 587

Noen ord om IMAP

Så vi studerte nettopp at SMTP brukes til å sende e-post, men hva er IMAP (Internet Access Messaging Protocol) til? SMTP kan ikke brukes til å søke etter og motta e-post fra serveren, IMAP eller POP3-protokollen brukes til det formålet.

IMAPCLIENT, IMAPLIB og PYZMAIL

Det er to store biblioteker i Python som kan brukes som en IMAP-klient for å finne, hente og slette e-post fra e-postserveren. Python har standard imaplib biblioteket, men et annet eksternt bibliotek imapclient er mer effektiv og enkel å bruke. I denne opplæringen bruker vi imapclient for å hente e-post fra e-postserveren.

Problemet med imapclient er at den henter e-post fra e-postserveren i råformat. Så vi trenger det pyzmail bibliotek som en parser for brukervennlig produksjon. For å installere begge bibliotekene, skriv

[e-postbeskyttet]: ~ $ sudo pip install imapclient
[e-postbeskyttet]: ~ $ sudo pip installere pyzmail

Få e-postene dine fra Mail Server

Nå lærer vi hvordan du søker og laster ned e-post fra e-postserveren ved hjelp av imapclient. Vi bruker imapclient til å søke og laste ned e-post fra serveren, så bruker vi pyzmail til å analysere dette råinnholdet. La oss

// importere imapclient-biblioteket
>>> importere imapclient
// Koble til GMAILs IMAP-server
>>> obj = imapclient.IMAPClient ('imap.gmail.com ', ssl = True)
// Logg inn på e-postkontoen din ved hjelp av legitimasjonen din
>>> obj.pålogging ('[email protected]', 's3cr4tp4ss')
'[e-postbeskyttet] autentisert (suksess)'
// Velg meldingsmappe du vil lese i.e Innboks, utkast, sendt e-post
>>> obj.select_folder ('INBOX', readonly = True)
'EXISTS': 830, 'PERMANENTFLAGS': (), 'HIGHESTMODSEQ': 112999, 'UIDNEXT': 931,
'FLAGS': ('\\ Answered', '\\ Flagged', '\\ Draft', '\\ Deleted', '\\ Seen',
'$ NotPhishing', '$ Phishing'), 'UIDVALIDITY': 1, 'LES-KUN': ["], 'RECENT': 0
// Søk i meldingene dine i innboksen, eller bruk et filter, nedenfor vises filteret
deg e-postene du mottok etter 25. oktober 2019
>>> mail_ids = obj.søk (['SINCE', '25 -Oct-2019 '])
>>> post_id
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
// Listen "mail_ids" inneholder en liste over e-post-ID-er mottatt siden 25.-oktober-2019,
du kan laste ned en e-post ved hjelp av imapclient-hentingsfunksjonen.
>>> raw_mail = obj.hente ([919], ['BODY []', 'FLAGS'])
// Nå er innholdet i raw_mail-variabelen i råformat, det kan ikke vises på
skjerm direkte, så vi trenger en parser for å analysere dette innholdet for en brukervennlig utgang
>>> importer pyzmail
>>> melding = pyzmail.PyzMessage.fabrikk (raw_mail [919] ['BODY []'])
// Nå blir e-post analysert og lagret i meldingsvariabelen, for å få temaet for
e-posten, bruk get_subject-funksjonen
>>> melding.get_subject ()
u'Klær ferdighetene dine denne Halloween med 25% avslag '
// På samme måte kan du se avsenderdetaljer
>>> melding.get_addresses ('fra')
[(u'Usama Azad ',' [email protected] ']]
>>> melding.få_adresser ('til')
[(u '[email protected]', '[email protected]']]
// Skriv inn for å få oversikten over e-posten
>>> melding.tekst_del.get_payload ().dekode (melding.tekst_del.charset)
u ”Hei! Kos deg med flate 25% på premiumkursene våre ”

Hvis du har en konto hos en annen e-postleverandør enn GMAIL, kan du logge på IMAP-serveren deres. Her er listen over IMAP-domenenavn til noen kjente e-postleverandører.

Forsørger Domenenavn for IMAP Server
YAHOO imap.post.yahoo.com
Hotmail / Outlook imap-post.Outlook.com
Verizon innkommende.verizon.nett
Comcast imap.comcast.nett
AT&T imap.post.att.nett

Slette e-post fra IMAP Server

I likhet med å søke og hente e-post fra serveren, kan du også slette e-post fra e-postserveren din ved hjelp av uid. Bare følg trinnene

// For å slette en e-postmelding, må du slå skrivebeskyttet til "Falsk" for å få skrivetilgang til din
e-post
>>> obj.select_folder ('INBOX', readonly = False)
>>> mail_ids = obj.søk (['SINCE', '25 -Oct-2019 '])
>>> post_id
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
 
// Gi en e-post-eid eller en liste over e-post-uids, etter å ha kjørt under kommandoen,
e-postmeldingen din forsvinner fra INBOX.
>>> obj.delete_messages (919)
919: ('\\ Sett', '\\ Slettet')
 
// Denne kommandoen sletter e-postene dine permanent fra e-postserveren
>>> obj.fjerne()
('Suksess', [])

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

Å lage din egen bursdagspåminnelse

Du har bursdager til vennene dine i de kommende månedene, og du vil ønske dem i bursdager. Men du har mye arbeid på kontoret ditt, og det er en mulighet for at du vil glemme å ønske dem. Så denne oppgaven kan utføres automatisk ved hjelp av python. Følgende er koden for å utføre denne oppgaven.

// importere moduler
importer re
// os-modulen brukes til å utføre operativsystemoppgaver i.e tilgang til kataloger
importer os
importer datatid
importere smtplib
 
// definere en funksjon som skal sende e-post
def send_mail (mottaker_mail_adresse, navn):
sender_mail_address = "[e-postbeskyttet]"
passwd = "senderPasswd"
// kobler til gmail-server med domenenavn og portnummer
obj = smtplib.SMTP ('smtp.gmail.com ', 587)
obj.ehlo ()
obj.starttls ()
// logger på gmail-kontoen din
obj.pålogging (sender_mail_adresse, passwd)
// sende e-post til 'reciever_mail_address'.
obj.sendmail (sender_mail_address, mottaker_mail_adresse, "Subject: BirthDay Wishing Mail \ n \ n HappyBirthday" + navn)
// avslutter tilkobling
obj.slutte()
// Hoveddelen
// går til katalogen der filen som inneholder data er til stede
os.chdir ("path_to_birthday_data_file")
mens 1:
// får dato og klokkeslett for nåværende øyeblikk
i dag = datetime.dato tid.i dag()
i dag = str (i dag)
// får inneværende år, måned, dag, time, minutt og sekund
gjeldende år = i dag [0: 4]
current_month = i dag [5: 7]
current_day = i dag [8:10]
current_hour = i dag [11:13]
current_minute = i dag [14:16]
current_sec = i dag [17:19]
// åpning av bursdagsfil i 'birthday_file' -objekt i lesemodus
birthday_file = åpen ('birthday_file', 'r')
// lagre alle linjene i 'birthday_file' i linjelisten
linjer = bursdagsfil.readlines ()
// lukker 'birthday_file' -objekt
bursdagsfil.Lukk()
// leser hver linje ved hjelp av for loop
for linje i linjer:
// lage et vanlig uttrykk for å finne en dato i 'birthday_file'
dateEx = re.kompilere (r "\ d 4 - \ d 2 - \ d 2")
findDate = dateEx.søk (linje)
dato = findDate.gruppe()
// får bursdag_måned og bursdag_dag fra filen
birthday_month = date [5: 7]
bursdag_dag = dato [8:10]
// lage et vanlig uttrykk for å finne e-postadresse fra birthday_file
mailEx = re.kompilere (r "\ w * @ \ w *.com ")
findMail = mailEx.søk (linje)
reciever_mail = findMail.gruppe()
// lage et vanlig uttrykk for å finne navnet på personen
nameEx = re.kompilere (r "\ w *")
findName = nameEx.søk (linje)
navn = finn navn.gruppe()
// sjekke om noens bursdag kommer eller ikke
hvis nåværende_måned == bursdag_måned og = nåværende_dag == bursdag_dag:
// sende e-post nøyaktig 08:00
hvis current_hour == '08' og current_minute == '00' og current_sec == '00':
// kaller "send_mail" -funksjonen
send_mail (mottaker_mail, navn)

Nå lager vi en 'bursdagsfil' der vi lagrer navn, e-postadresser og fødselsdato. Dette er en enkel tekstfil og ser slik ut.

Forklaring

Vi vil lese denne filen ved hjelp av python-skript og sjekke hvem som har bursdag og ønsker dem. Først og fremst vil vi importere noen moduler. DATETIME-modulen har funksjoner som gir oss nåværende dato og klokkeslett og mange flere. Men vi vil bare bruke dette til å finne gjeldende dato og klokkeslett. SMTPLIB-modulen brukes til å sende e-post og har blitt forklart ovenfor. RE-modulen har funksjoner som brukes til å finne regulært uttrykk fra en streng.

I dette skriptet definerer vi 'send_mail' -funksjonen, som sender e-post til 'reciever_mail_address', hvis navn er 'name'. Begge argumentene blir sendt til funksjonen fra hoveddelen av msg. I hoveddelen av skriptet vil vi se hvordan vi finner 'reciever_mail_address' og 'name'.

Å sende e-post ved hjelp av smtplib er forklart ovenfor, slik at du kan lese den, og den vil ikke bli diskutert her.

I hoveddelen går vi til katalogen der vi har lagret 'birthday_file' ved hjelp av 'os.chdir () '. Så har vi en 'while loop' som alltid er sant, så den vil sjekke bursdagen kontinuerlig. Nå får vi nåværende dato og klokkeslett og lagrer det i 'i dag' -variabelen. Det ser slik ut.

2019-11-01 16:19:07.144925

Vi trekker ut år, måned, dag, time, minutter og sekunder ved hjelp av indekser for disse mengdene. Etter dette vil vi åpne birthday_file i et objekt 'birthday_file' i lesemodus, så vi kan bare lese det. Nå vil vi lagre alle linjene i denne filen i linjelisten. 'bursdagsfil.readlines () 'lagrer hver linje i' linjer '-listen. Etter dette lukker vi birthday_file ved å bruke 'birthday_file.lukk () 'funksjon.

Nå vil vi lese hver linje en etter en ved hjelp av for loop. I hver linje er bare én persons data tilgjengelig i 'birthday_file', så vi leser bare én persons data om gangen i denne sløyfen.

Etter dette vil vi trekke ut fødselsdato, e-postadresse og navn på personen ved hjelp av RE-modulen. Som vi har skrevet datoen i følgende format

ÅÅÅÅ-MM-DD

Så vi vil lage et vanlig uttrykk 'dateEx' som finner dette formatet i linjen.

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

Over kommandoen finn en streng som har '4 sifre' etterfulgt av '-' deretter '2 sifre' etterfulgt av '-' og '2 sifre'. Dette vil gi oss fødselsdatoen til personen, så vi trekker ut fødselsdag og fødselsdag fra dette uttrykket.

På samme måte finner vi e-postadresser ved bruk av vanlige uttrykk. Etter dette vil vi sammenligne bursdag_måned og nåværende_måned og bursdag_dag og nåværende_dag. Hvis disse vilkårene er oppfylt, vil vi sende bursdags-e-posten ved å bruke 'send_mail' -funksjonen nøyaktig '08: 00 '.

Kjører skript automatisk via Cronjob

Nå vil vi sørge for at dette python-skriptet kjører hver gang. For å gjøre dette vil vi legge til denne oppgaven i crontab. Crontab, i linux, brukes til å utføre oppgaver automatisk. Det vi må gjøre er å bare legge til oppgaven i crontab. For å gjøre dette, følg trinnene.

  1. Åpne crontab for å legge til oppgave i terminalen din ved hjelp av følgende kommando
[e-postbeskyttet]: ~ $ crontab -e
  1. På slutten av denne filen, skriv inn følgende kommando uten #
@reboot python path_to_the_script

Ovenstående kommandoer vil gjøre det mulig for systemet ditt å kjøre python-skriptet hver gang du starter systemet på nytt. På denne måten vil systemet kjøre python-skript hver gang systemet er på.

Hvordan utvikle et spill på Linux
For et tiår siden ville ikke mange Linux-brukere forutsi at deres favorittoperativsystem en dag ville være en populær spillplattform for kommersielle ...
Åpne kildeporter for kommersielle spillmotorer
Gratis, åpen kildekode og plattformspillmotorrekreasjoner kan brukes til å spille gamle så vel som noen av de ganske nylige spilletitlene. Denne artik...
Beste kommandolinjespill for Linux
Kommandolinjen er ikke bare din største allierte når du bruker Linux, den kan også være kilden til underholdning fordi du kan bruke den til å spille m...