For eksempel vil du sende en påminnelse til kundene dine om de gjenværende regningene, og du har alle kunderelaterte data som telefonnumrene deres, adresse, alder osv. I et Excel -ark eller en database, 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 -postprotokoll fungerer og hvordan du kan automatisere prosessen for å spare din dyrebare tid.
Simple Mail Transfer Protocol (SMTP) er datastyrt ekvivalent med posttjenesten din. Det er en protokoll som fungerer på applikasjonslag i et TCP/IP -nettverk. Det er en standardprotokoll for å sende og motta e -post over internett. Postoverføringsprosess 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å Yahoo -kontoen hans. Du skriver en e -post og treffer Send, men backend -prosessen er litt komplisert, og for å forstå denne prosessen, må du forstå SMTP først. SMTP -e -postklienten din sender først Helo (eller Ehlo) til Gmail -serveren, kan du si at denne kommandoen eller overskriften tilsvarer Vert Header i HTTP -protokollen og brukes til å identifisere serveren ved hjelp av domenenavn. Etter Helo eller Ehlo, autentiserer klienten seg til serveren med det gitte brukernavnet og passordet ved hjelp av Auth kommando. Deretter spesifiserer den avsenderens og mottakerens e -postadresse og deretter meldingsorganet og sender e -post til Gmail -serveren. Gmail Server vil først bekrefte at om mottakerens e -postadresse på Yahoo eksisterer eller ikke, så vil den sende e -posten til Yahoo -serveren der mottakeren kan hente e -postene sine fra.
Smtplib
SMTPLIB er et Python -bibliotek som kan brukes som SMTP -klient akkurat som Gmail, Yahoo, Thunderbird eller hvilken som helst annen e -postklient og kan brukes til å sende e -post. Vi kan utføre alle oppgaver ved hjelp av SMTPLIB -klient 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.
ubuntu@ubuntu: ~ $ pip installer smtplib
Eller i Python3
ubuntu@ubuntu: ~ $ pip installer smtplib
Skrive din første e -post med Python
I denne opplæringen vil jeg bruke en Gmail -konto som avsender, også jeg vil bruke Python -konsollen, så det vil være lettere for meg å forklare hver kodeinje trinn for trinn. For å komme i gang, må vi gi vår Gmail -tilgang til mindre sikre apper.
Så logg inn på Gmail -kontoen din og gå til kontoinnstillinger.
Forsikre deg nå om at tilgang for mindre sikre apper er slått på.
Nå åpner Python -konsollen din og begynn å skrive din første e -post ved hjelp av Python
ubuntu@ubuntu: ~ $ python
Python 2.7.16 (standard, 7. oktober 2019, 17:36:04)
[GCC 8.3.0] på linux2
Skriv inn "hjelp", "copyright", "studiepoeng" eller "lisens" for mer informasjon.
// Importer SMTP -biblioteket
>>> Importer smtplib
// koble til Gmail -serveren med domenenavn og portnummer (denne innstillingen er forskjellig for
Hver e -postleverandør, ta en titt på tabellen gitt 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] \ nsize35882577 \ n8bitmime \ nstarttls \
NenhancedStatusCodes \ npipelining \ nchunking \ nsmtputf8 ')
// Port 587 betyr at vi bruker kryptert TLS -tilkobling, så begynn krypterte TLS
Kommunikasjon ved hjelp av starttls (), slik at legitimasjonene og meldingene våre ikke blir sniffet
>>> mailobj.starttls ()
(220, '2.0.0 klar til å starte tls ')
// Logg inn på Gmail -kontoen din ved hjelp av e -post og passord
>>> mailobj.Logg inn ('[email protected] ',' s3cr3t_p4sssw0rd ')
(235, '2.7.0 akseptert ')
// Spesifiser avsender og mottakers e -postadresse og e -postinnhold
>>> mailobj.sendmail ('[email protected] ',' [email protected] ',' Emne:
Hei Verden! \ n Hello World! Dette er min første Hello World -e -post i Python ')
// Lukk tilkoblingen til Gmail -serveren
>>> mailobj.slutte()
(221, '2.0.0 lukkende tilkobling B6SM4519863LFI.72 - GSMTP ')
I eksemplet ovenfor, erstatt det gitte innholdet 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 postleverandører.
Navn | Serverdomenenavn | Havn |
Gmail | SMTP.Gmail.com | 587 |
Outlook / Hotmail | SMTP-post.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 bare studerte at SMTP brukes til å sende e -post, men det som er IMAP (Internet Access Messaging Protocol) for? SMTP kan ikke brukes til å søke og få 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 IMAP -klient for å finne, hente og slette e -post fra e -postserveren. Python har standard Imaplib bibliotek, men et annet eksternt bibliotek ImapClient er mer effektiv og enkel å bruke. I denne opplæringen bruker vi ImapClient For å hente e -post fra Mail Server.
Problemet med ImapClient er at den henter e -post fra e -postserver i rått format. Så vi trenger Pyzmail Bibliotek som analyser for brukervennlig output. For å installere begge bibliotekene, skriv inn
ubuntu@ubuntu: ~ $ sudo pip installer iMapClient
ubuntu@ubuntu: ~ $ sudo pip install 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 for å analysere dette råinnholdet. La oss
// Importer ImapClient Library
>>> Importer imapclient
// Koble til Gmails IMAP -server
>>> obj = imapclient.IMAPClient ('IMAP.Gmail.com ', ssl = true)
// Logg inn på e -postkontoen din ved å bruke legitimasjonen din
>>> obj.Logg inn ('[email protected] ',' s3cr4tp4ss ')
'[email protected] autentisert (suksess) '
// Velg meldingsmappe for å lese i.e innboks, utkast, sendte e -post
>>> obj.SELECT_FOLDER ('innboks', readonly = true)
'Eksister': 830, 'PermanentFlags': (), 'HighestModseq': 112999, 'Uidnext': 931,
'Flagg': ('\\ svarte', '\\ flagget', '\\ utkast', '\\ sletted', '\\ sett',
'$ Notphishing', '$ phishing'), 'uidvaliditet': 1, 'skrivebeskyttet': ["], 'nylig': 0
// Søk på meldingene dine i innboksen din, eller bruk et filter, under filteret vises
Du mottatt e-postene etter 25. oktober 2019
>>> mail_ids = obj.søk (['siden', '25 -okt-2019 '])
>>> mail_ids
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
// Listen “Mail_ids” inneholder en liste over mottatt e-post-ID-er siden 25-okt-2019,
Du kan laste ned en e -post ved hjelp av ImapClient Fetch -funksjonen.
>>> raw_mail = obj.Fetch ([919], ['Body []', 'Flags'])
// Nå er innholdet i Raw_mail -variabelen i rått format, det kan ikke vises på
Skjerm direkte, så vi trenger en analyser for å analysere dette innholdet for en brukervennlig utdata
>>> Importer Pyzmail
>>> melding = pyzmail.PyzMessage.Fabrikk (Raw_mail [919] ['Body []'])
// Nå er e -post analysert og lagret i meldingsvariabel, for å få emnet for
e -posten, bruk get_subject -funksjonen
>>> melding.get_subject ()
U'Dress Up dine ferdigheter denne Halloween med 25% avslag '
// Tilsvarende kan du se avsenderdetaljer
>>> melding.get_addresses ('fra')
[(U'USAMA Azad ',' [email protected] ')]
>>> melding.get_addresses ('til')
[(U'[email protected] ',' [email protected] ')]
// for å få kroppen til e -posten, skriv inn
>>> melding.tekst_part.get_payload ().avkode (melding.tekst_part.Charset)
u ”Hei! Nyt flat 25% på premiumkursene våre ”
Hvis du har en konto i en annen annen e -posttjenesteleverandør enn Gmail, kan du logge inn på IMAP -serveren. Her er IMAP -domenenavnslisten over noen kjente 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 -posten din fra IMAP -serveren
I likhet med å søke og hente e -post fra serveren, kan du også slette e -postmeldinger fra e -postserveren din ved å bruke UID. Bare følg de gitte trinnene
// For å slette en e -post, må du bare lese om "falsk" for å få skriv tilgang til din
E -post
>>> obj.SELECT_FOLDER ('innboks', readonly = falsk)
>>> mail_ids = obj.søk (['siden', '25 -okt-2019 '])
>>> mail_ids
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
// Gi en e -post uid eller en liste over e -post -uids, etter å ha kjørt nedenfor kommandoen,
E -posten din vil bli forsvunnet fra innboksen.
>>> obj.delete_messages (919)
919: ('\\ sett', '\\ slettet')
// Denne kommandoen vil slette e -postene dine permanent fra e -postserveren
>>> obj.fjerne()
('Suksess', [])
https: // techtopz.com/build-a-Birthday-Reminder-Application-in-Python-on-Mac/
Å gjøre opp din egen bursdags påminnelse
Du har bursdager med vennene dine de kommende månedene, og du vil ønske dem på bursdagene deres. Men du har mye arbeid på kontoret ditt, og det er en mulighet for at du vil glemme å ønske dem. Så denne oppgaven kan automatisk utføres ved hjelp av Python. Følgende er koden for å utføre denne oppgaven.
// Importere modulerNå lager vi en 'bursdag_file', der vi lagrer navn, e -postadresser og deres fødselsdato. Dette er en enkel tekstfil og ser slik ut.
Forklaring
Vi vil lese denne filen ved hjelp av Python -skriptet og sjekk hvis bursdag kommer og ønsker dem. Først av alt vil vi importere noen moduler. DateTime -modulen har funksjoner som gir oss gjeldende dato og tid og mange flere. Men vi vil bare bruke dette for å finne gjeldende dato og tid. SMTPLIB -modul brukes til å sende post og har blitt forklart ovenfor. RE -modulen har funksjoner som brukes til å finne vanlig uttrykk fra en streng.
I dette skriptet definerer vi 'send_mail' -funksjonen, som sender e -post til 'reciever_mail_address', hvis navn er 'navn'. Begge argumentene sendes til funksjonen fra hoveddelen av MSG. I hoveddelen av skriptet vil vi se hvordan vi finner 'reciever_mail_address' og 'name'.
Å sende e -post med SMTPLIB er blitt forklart ovenfor, slik at du kan lese den, og den vil ikke bli diskutert her.
I hovedorganet går vi til katalogen der vi har lagret 'Birthday_File' ved hjelp av 'OS.chdir () '. Så har vi en 'mens sløyfe' som alltid er sant, så den vil sjekke bursdagen kontinuerlig. Nå får vi gjeldende dato og tid og lagre den i 'Today' variabel. Det ser slik ut.
2019-11-01 16:19:07.144925
Vi vil trekke ut år, måned, dag, time, minutter og sekunder ved å bruke indekser i disse mengdene. Etter dette åpner vi bursdag_file i et objekt 'bursdag_fil' i lesemodus, slik at vi bare kan lese den. Nå lagrer vi alle linjene i denne fillisten. 'Bursdag_fil.ReadLines () 'vil lagre hver linje i' linjer '-liste. Etter dette vil vi lukke bursdag_fil ved å bruke 'bursdag_fil.Lukk () 'Funksjon.
Nå skal vi lese hver linje en etter en som bruker for loop. I hver linje er bare en persons data tilgjengelig i 'Birthday_File', så vi leser bare en persons data på en gang i denne loopen.
Etter dette vil vi hente ut fødselsdato, e -postadresse og navn på personen som bruker RE -modulen. Som vi har skrevet datoen i følgende format
Yyyy-mm-dd
Så vi vil lage et vanlig uttrykk 'datex' 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 datoen for fødselen til personen, så vi vil trekke ut fødselsdag og fødsels_måned fra dette uttrykket.
Tilsvarende finner vi e -postadresse ved hjelp av vanlige uttrykk. Etter dette vil vi sammenligne bursdag_måned. Hvis disse forholdene er fornøyde, sender vi bursdags -e -posten ved å bruke 'Send_mail' -funksjonen på Exact '08: 00 '.
Nå vil vi sørge for at dette Python -skriptet kjører hver gang. For å gjøre dette, vil vi legge denne oppgaven til crontab. Crontab, i Linux, brukes til å utføre oppgaver automatisk. Det vi må gjøre er bare å legge oppgaven til crontab. For å gjøre det, følg de gitte trinnene.
ubuntu@ubuntu: ~ $ crontab -e
@reboot python path_to_the_script
Overkommandoer vil gjøre det mulig for systemet ditt å kjøre Python -skriptet hver gang du starter systemet ditt på nytt. På denne måten vil systemet ditt kjøre Python -skript hver gang systemet ditt er på.