Pytonorm

Skicka e-post med Python

Skicka e-post med Python
Att skicka, kontrollera och svara på e-post är en tidskrävande uppgift, särskilt när du gör det för ett stort antal personer eller kunder där du bara behöver ändra mottagarens namn, adress, ålder och andra små saker. Det skulle vara en mycket svår uppgift för dig att skriva ett program som kan hantera alla typer av dina personliga / företags e-postmeddelanden men ändå kan du automatisera en hel del saker i detta avseende som så småningom kommer att spara mycket tid.

Till exempel vill du skicka en påminnelse till dina kunder om deras återstående räkningar och du har all kundrelaterad data som deras telefonnummer, adress, ålder etc i ett excelblad eller en databas, istället för att göra det manuellt kan du skriva enkelt program i Python för att automatiskt göra det åt dig. I den här handledningen lär vi oss hur e-postprotokoll fungerar och hur du kan automatisera processen för att spara din dyrbara tid.

Ett ord om SMTP

Simple Mail Transfer Protocol (SMTP) är datoriserad motsvarande din posttjänst. Det är ett protokoll som fungerar på applikationslagret i ett TCP / IP-nätverk. Det är ett standardprotokoll för att skicka och ta emot e-post via internet. Processen för e-postöverföring består av e-postserver och klienter som skickar och tar emot e-post till varandra.

Du har till exempel ett GMAIL-konto och du vill skicka ett e-postmeddelande till din vän på hans YAHOO-konto. Du skriver ett e-postmeddelande och trycker på skicka, men backendprocessen är lite komplicerad, och för att förstå denna process måste du först förstå SMTP. Din SMTP-e-postklient skickar först HEJ (eller EHLO) till GMAIL-servern kan du säga att det här kommandot eller rubriken motsvarar Värd header i HTTP-protokoll och används för att identifiera servern med hjälp av domännamn. Efter HELO eller EHLO autentiserar klienten sig mot servern med det angivna användarnamnet och lösenordet med AUTH kommando. Sedan specificeras avsändarens och mottagarens e-postadress och sedan meddelandetexten och skickar e-post till GMAIL-servern. GMAIL-servern kommer först att bekräfta att oavsett om mottagarens e-postadress på YAHOO existerar eller inte, kommer den att skicka e-postmeddelandet till YAHOO Server där mottagaren kan hämta sina e-postmeddelanden från.

SMTPLIB

SMTPLIB är ett pythonbibliotek som kan användas som en SMTP-klient precis som din GMAIL, YAHOO, Thunderbird eller vilken annan e-postklient som helst och kan användas för att skicka e-post. Vi kan utföra alla uppgifter med SMTPLIB-klienten som vi kan göra med dem som har ett grafiskt användargränssnitt.

Det kommer som standard i Python, om du inte har det kan du installera med följande kommando.

[e-postskyddad]: ~ $ pip installera smtplib

ELLER i Python3

[e-postskyddad]: ~ $ pip installera smtplib

Skriva din första e-post med Python

I den här handledningen använder jag ett GMAIL-konto som avsändare, jag kommer också att använda Python-konsolen, så det blir lättare för mig att förklara varje rad kod steg för steg. För att komma igång måste vi ge GMAIL åtkomst till mindre säkra appar.

Så logga in på ditt GMAIL-konto och gå sedan till kontoinställningar.

Se nu till att åtkomst för mindre säkra appar är aktiverad.

Öppna nu din pythonkonsol och börja skriva din första e-post med Python

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

Skriv "hjälp", "copyright", "credits" eller "licens" för mer information.

// importera SMTP-biblioteket
>>> importera smtplib
// anslut till GMAIL-servern med domännamn och portnummer (denna inställning skiljer sig åt för
varje e-postleverantör, ta en titt på tabellen nedan)
>>> mailobj = smtplib.SMTP ('smtp.gmail.com ', 587)
// säg hej till servern
>>> mailobj.ehlo ()
(250, 'smtp.gmail.com till din tjänst, [103.255.4.246] \ nSIZE35882577 \ n8BITMIME \ nSTARTTLS \
nENHANCEDSTATUSCODES \ nPIPELINING \ nCHUNKING \ nSMTPUTF8 ')
// Port 587 betyder att vi använder krypterad TLS-anslutning, så starta krypterad TLS
kommunikation med starttls (), så att våra referenser och meddelanden inte snusas
>>> mailobj.starttls ()
(220, '2.0.0 Redo att starta TLS ')
// logga in på ditt GMAIL-konto med e-post och lösenord
>>> mailobj.inloggning ('[email protected]', 's3cr3t_p4ssw0rd')
(235, '2.7.0 accepterad ')
// ange avsändarens och mottagarens e-postadress och e-postinnehåll
>>> mailobj.sendmail ('[email protected]', '[email protected]', 'Subject:
Hej världen! \ n Hej värld! detta är mitt första hej världs-e-postmeddelande i Python ')

// nära anslutning till GMAIL-servern
>>> mailobj.sluta()
(221, '2.0.0 stängningsanslutning b6sm4519863lfi.72 - gsmtp ')

I ovanstående exempelprogram ersätter du det givna innehållet med ditt eget. Om du inte är GMAIL-användare kan du använda din leverantörs e-postserver. Här är listan över domännamn och portar för vissa vanliga e-postleverantörer.

namn Serverdomännamn Hamn
Gmail smtp.gmail.com 587
Outlook / Hotmail smtp-mail.syn.com 587
YAHOO Mail smtp.post.yahoo.com 587
Verizon smtp.verizon.netto 465
Comcast smtp.comcast.netto 587

Några ord om IMAP

Så vi studerade just att SMTP används för att skicka e-post, men vad är IMAP (Internet Access Messaging Protocol) för? SMTP kan inte användas för att söka och få e-post från servern, IMAP- eller POP3-protokollet används för det ändamålet.

IMAPCLIENT, IMAPLIB och PYZMAIL

Det finns två stora bibliotek i Python som kan användas som en IMAP-klient för att hitta, hämta och ta bort e-postmeddelanden från e-postservern. Python har standard imaplib bibliotek men ett annat externt bibliotek imapclient är effektivare och lättare att använda. I den här handledningen använder vi imapclient för att hämta e-post från e-postservern.

Problemet med imapclient är att den hämtar e-post från e-postservern i råformat. Så vi behöver pyzmail bibliotek som en parser för användarvänlig produktion. För att installera båda biblioteken, skriv

[e-postskyddad]: ~ $ sudo pip install imapclient
[e-postskyddad]: ~ $ sudo pip installera pyzmail

Få dina e-postmeddelanden från e-postservern

Nu lär vi oss att söka och ladda ner e-post från e-postservern med imapclient. Vi använder imapclient för att söka och ladda ner e-post från servern, sedan använder vi pyzmail för att analysera detta råa innehåll. Låt oss

// importera imapclient-bibliotek
>>> importera imapclient
// Anslut till GMAILs IMAP-server
>>> obj = imapclient.IMAPClient ('imap.gmail.com ', ssl = True)
// Logga in på ditt e-postkonto med dina referenser
>>> obj.inloggning ('[email protected]', 's3cr4tp4ss')
'[e-postskyddad] autentiserad (framgång)'
// Välj meddelandemapp att läsa i.e-INBOX, UTKAST, SKICKA mail
>>> obj.select_folder ('INBOX', readonly = True)
'EXISTS': 830, 'PERMANENTFLAGS': (), 'HIGHESTMODSEQ': 112999, 'UIDNEXT': 931,
'FLAGGAR': ('\\ Besvarade', '\\ Flaggad', '\\ Utkast', '\\ Borttagen', '\\ Sett',
'$ NotPhishing', '$ Phishing'), 'UIDVALIDITY': 1, 'ENDAST LÄS': ["], 'RECENT': 0
// Sök i dina meddelanden i din INBOX, eller använd ett filter, nedanför filtret visas
du skickade e-postmeddelanden efter 25 oktober 2019
>>> mail_ids = objekt.sök (['SINCE', '25 -Oct-2019 '])
>>> post_id
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
// Listan "mail_ids" innehåller en lista över e-post-ID: er som tagits emot sedan 25-okt-2019,
du kan ladda ner ett e-postmeddelande med hjälp av imapclient-hämtningsfunktionen.
>>> raw_mail = obj.hämta ([919], ['BODY []', 'FLAGS'])
// Nu är innehållet i variabeln raw_mail i råformat, det kan inte visas på
skärmen direkt, så vi skulle behöva en parser för att analysera detta innehåll för en användarvänlig utgång
>>> importera pyzmail
>>> meddelande = pyzmail.PyzMessage.fabrik (raw_mail [919] ['BODY []'])
// Nu analyseras e-post och lagras i meddelandevariabel för att få ämnet till
e-postmeddelandet, använd get_subject-funktionen
>>> meddelande.get_subject ()
u'Dress up your skills this Halloween with 25% off '
// På samma sätt kan du se avsändarinformation
>>> meddelande.get_addresses ('från')
[(u'Usama Azad ',' [email protected] ']]
>>> meddelande.get_addresses ('to')
[(u '[email protected]', '[email protected]']]
// Skriv för att få meddelandets innehåll
>>> meddelande.text_del.get_payload ().avkoda (meddelande.text_del.charset)
u ”Hej! Njut av platta 25% på våra premiumkurser ”

Om du har ett konto hos någon annan e-postleverantör än GMAIL kan du logga in på deras IMAP-server. Här är listan över IMAP-domännamn för några kända e-postleverantörer.

Leverantör Domännamn för IMAP Server
YAHOO imap.post.yahoo.com
Hotmail / Outlook imap-mail.syn.com
Verizon inkommande.verizon.netto
Comcast imap.comcast.netto
AT&T imap.post.att.netto

Ta bort din e-post från IMAP Server

På samma sätt som att söka och hämta e-postmeddelanden från servern kan du också ta bort e-postmeddelanden från din e-postserver med hjälp av deras uid. Följ bara de angivna stegen

// För att radera ett e-postmeddelande måste du vända skrivskyddad till "False" för att få skrivåtkomst till din
e-postmeddelanden
>>> obj.select_folder ('INBOX', readonly = False)
>>> mail_ids = objekt.sök (['SINCE', '25 -Oct-2019 '])
>>> post_id
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
 
// Ange ett e-postmeddelande eller en lista med e-posthjälpmedel efter att ha körts under kommandot,
din e-post försvinner från INBOX.
>>> obj.delete_messages (919)
919: ('\\ Sett', '\\ borttagen')
 
// Detta kommando raderar dina e-postmeddelanden permanent från e-postservern
>>> obj.utplåna()
('Framgång', [])

https: // techtopz.com / bygg-en-födelsedag-påminnelse-applikation-i-python-på-mac /

Skapa din egen födelsedagspåminnelse

Du har födelsedagar för dina vänner de kommande månaderna och du vill önska dem på deras födelsedagar. Men du har mycket arbete på ditt kontor och det finns en möjlighet att du kommer att glömma att önska dem. Så den här uppgiften kan utföras automatiskt med python. Följande är koden för att utföra denna uppgift.

// importera moduler
importera om
// os-modulen används för att utföra operativsystemuppgifter i.e åtkomst till kataloger
importera os
importera datatid
importera smtplib
 
// definierar en funktion som skickar e-post
def send_mail (reciever_mail_address, name):
sender_mail_address = "[e-postskyddad" "
passwd = "senderPasswd"
// anslutning till gmail-server med domännamn och portnummer
obj = smtplib.SMTP ('smtp.gmail.com ', 587)
obj.ehlo ()
obj.starttls ()
// logga in på ditt Gmail-konto
obj.inloggning (avsändar-postadress, passwd)
// skicka e-post till 'reciever_mail_address'.
obj.sendmail (sender_mail_address, reciever_mail_address, "Subject: BirthDay Wishing Mail \ n \ n HappyBirthday" + namn)
// avslutar anslutningen
obj.sluta()
// Huvudkroppen
// går till katalogen där filen som innehåller data finns
os.chdir ("sökväg till födelsedag_data_fil")
medan 1:
// få datum och tid för nuvarande ögonblick
idag = datetime.datum Tid.i dag()
idag = str (idag)
// får aktuellt år, månad, dag, timme, minut och sekund
nuvarande_år = idag [0: 4]
current_month = idag [5: 7]
aktuell_dag = idag [8:10]
current_hour = idag [11:13]
current_minute = idag [14:16]
current_sec = idag [17:19]
// öppnar födelsedagsfil i 'birthday_file' -objekt i läsläge
födelsedagsfil = öppen ('födelsedagsfil', 'r')
// spara alla rader i "födelsedagsfil" i radlistan
rader = födelsedagsfil.readlines ()
// stänger objektet 'födelsedagsfil'
födelsedagsfil.stänga()
// läser varje rad med hjälp av for loop
för rad i rader:
// gör ett regelbundet uttryck för att hitta ett datum i 'birthday_file'
dateEx = re.kompilera (r "\ d 4 - \ d 2 - \ d 2")
findDate = dateEx.sök (rad)
datum = findDate.grupp()
// få födelsedag_månad och födelsedag_dag från filen
födelsedag_månad = datum [5: 7]
födelsedagsdag = datum [8:10]
// gör ett vanligt uttryck för att hitta e-postadress från födelsedagsfil
mailEx = re.kompilera (r "\ w * @ \ w *.com ")
findMail = mailEx.sök (rad)
reciever_mail = findMail.grupp()
// gör ett regelbundet uttryck för att hitta personens namn
nameEx = re.kompilera (r "\ w *")
findName = nameEx.sök (rad)
namn = hitta namn.grupp()
// kontrollera om någons födelsedag kommer eller inte
if current_month == birthday_month and = current_day == birthday_day:
// skicka e-post exakt 08:00
if current_hour == '08' and current_minute == '00' and current_sec == '00':
// ringer "send_mail" -funktionen
send_mail (reciever_mail, namn)

Nu gör vi en "födelsedagsfil" där vi sparar namn, e-postadresser och deras födelsedatum. Det här är en enkel textfil och ser ut så här.

Förklaring

Vi kommer att läsa den här filen med hjälp av pythonscript och kontrollera vems födelsedag kommer och önskar dem. Först och främst importerar vi några moduler. DATETIME-modulen har funktioner som ger oss aktuellt datum och tid och många fler. Men vi använder bara detta för att hitta aktuellt datum och tid. SMTPLIB-modulen används för att skicka e-post och har förklarats ovan. RE-modulen har funktioner som används för att hitta reguljärt uttryck från en sträng.

I det här skriptet definierar vi funktionen 'send_mail', som skickar e-post till 'reciever_mail_address', vars namn är 'name'. Båda argumenten skickas till funktionen från msgstr huvuddel. I skriptets huvuddel kommer vi att se hur vi hittar 'reciever_mail_address' och 'name'.

Skicka e-post med smtplib har förklarats ovan, så du kan läsa det och det kommer inte att diskuteras här.

I huvudsak går vi till katalogen där vi har sparat 'birthday_file' med hjälp av 'os.chdir () '. Sedan har vi en 'while-slinga' som alltid är sant så det kommer att kontrollera födelsedagen kontinuerligt. Nu får vi aktuellt datum och tid och sparar det i 'idag' variabel. Det ser ut så här.

2019-11-01 16:19:07.144925

Vi extraherar år, månad, dag, timme, minuter och sekunder med hjälp av index för dessa kvantiteter. Efter detta öppnar vi födelsedagsfil i ett objekt 'födelsedagsfil' i läsläge, så vi kan bara läsa det. Nu kommer vi att spara alla rader i den här filen i rader. 'födelsedagsfil.readlines () 'kommer att spara varje rad i listan. Efter detta stänger vi födelsedagsfil med 'födelsedagsfil'.stäng () 'funktion.

Nu läser vi varje rad en efter en med hjälp av for loop. I varje rad finns endast en persons data tillgängliga i "födelsedagsfil", så vi läser bara en persons data åt gången i den här slingan.

Efter detta extraherar vi födelsedatum, e-postadress och personens namn med hjälp av RE-modulen. Som vi har skrivit datumet i följande format

ÅÅÅÅ-MM-DD

Så vi kommer att göra ett reguljärt uttryck 'dateEx' som hittar detta format i raden.

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

Ovanför kommandot hittar du en sträng som har '4 siffror' följt av '-' sedan '2 siffror' följt av '-' och '2 siffror'. Detta ger oss personens födelsedatum så vi extraherar födelsedag och födelsemånad från detta uttryck.

På samma sätt hittar vi e-postadresser med reguljära uttryck. Efter detta kommer vi att jämföra födelsedag_månad och aktuell_månad och födelsedag_dag och aktuell_dag. Om dessa villkor är uppfyllda skickar vi födelsedags-e-postmeddelandet med funktionen 'send_mail' exakt '08: 00 '.

Köra skript automatiskt via Cronjob

Nu kommer vi att se till att detta python-skript körs varje gång. För att göra detta lägger vi till den här uppgiften i crontab. Crontab, i Linux, används för att utföra uppgifter automatiskt. Vad vi måste göra är att bara lägga till uppgiften i crontab. För att göra det, följ de angivna stegen.

  1. Öppna crontab för att lägga till uppgift i din terminal med följande kommando
[e-postskyddad]: ~ $ crontab -e
  1. I slutet av den här filen anger du följande kommando utan #
@reboot python path_to_the_script

Ovanstående kommandon gör att ditt system kan köra python-skriptet varje gång du startar om ditt system. På det här sättet kommer ditt system att köra python-skript varje gång ditt system är på.

Mus Markören hoppar eller rör sig slumpmässigt när du skriver in Windows 10
Markören hoppar eller rör sig slumpmässigt när du skriver in Windows 10
Om du upptäcker att muspekaren hoppar eller rör sig på egen hand, automatiskt, slumpmässigt när du skriver in Windows-bärbar dator eller dator, kan nå...
Mus Så här vänder du mus- och styrplattans rullningsriktning i Windows 10
Så här vänder du mus- och styrplattans rullningsriktning i Windows 10
Mus och Pekplattas gör inte bara datoranvändning lättare men effektivare och mindre tidskrävande. Vi kan inte föreställa oss ett liv utan dessa enhete...
Mus Så här ändrar du muspekare och markörstorlek, färg och schema på Windows 10
Så här ändrar du muspekare och markörstorlek, färg och schema på Windows 10
Muspekaren och markören i Windows 10 är mycket viktiga aspekter av operativsystemet. Detta kan också sägas för andra operativsystem, så i sanning är d...