Python

E-pasta ziņojumu sūtīšana ar Python

E-pasta ziņojumu sūtīšana ar Python
E-pasta ziņojumu sūtīšana, pārbaudīšana un atbildēšana uz tiem ir laikietilpīgs uzdevums, it īpaši, ja to darāt lielam skaitam cilvēku vai klientu, kur jums vienkārši jāmaina saņēmēja vārds, adrese, vecums un citas sīkas lietas. Jums būtu ļoti grūts uzdevums uzrakstīt programmu, kas varētu apstrādāt visu veidu personiskos / biznesa e-pastus, taču šajā ziņā jūs varat automatizēt daudz lietu, kas galu galā ietaupīs daudz laika.

Piemēram, jūs vēlaties nosūtīt saviem klientiem atgādinājumu par atlikušajiem rēķiniem, un jums ir visi ar klientiem saistīti dati, piemēram, viņu tālruņa numuri, adrese, vecums utt., Excel lapā vai datu bāzē, nevis tā, lai to izdarītu manuāli, varat vienkārša programma Python, lai to automātiski izdarītu jūsu vietā. Šajā apmācībā mēs uzzināsim, kā darbojas e-pasta protokols un kā jūs varat automatizēt procesu, lai ietaupītu jūsu dārgo laiku.

Vārds par SMTP

Vienkāršais pasta pārsūtīšanas protokols (SMTP) ir datorizēts jūsu pasta pakalpojuma ekvivalents. Tas ir protokols, kas darbojas TCP / IP tīkla lietojumprogrammu slānī. Tas ir standarta protokols e-pastu nosūtīšanai un saņemšanai internetā. Pasta pārsūtīšanas process sastāv no tā, ka e-pasta serveri un klienti viens otram sūta un saņem e-pastus.

Piemēram, jums ir GMAIL konts un vēlaties nosūtīt draugam e-pastu uz viņa YAHOO kontu. Jūs rakstāt e-pastu un nospiežat nosūtīt, taču aizmugures process ir nedaudz sarežģīts, un, lai saprastu šo procesu, vispirms jums būs jāsaprot SMTP. Jūsu SMTP e-pasta klients vispirms nosūta SVEIKI (vai EHLO) uz GMAIL serveri, varat teikt, ka šī komanda vai galvene ir ekvivalenta Saimnieks galveni HTTP protokolā, un to izmanto, lai identificētu serveri, izmantojot domēna nosaukumu. Pēc HELO vai EHLO klients autentificējas serverī ar norādīto lietotājvārdu un paroli, izmantojot AUTH komandu. Tad tas norāda sūtītāja un saņēmēja e-pasta adresi, pēc tam ziņojuma tekstu un nosūta e-pastu uz GMAIL serveri. GMAIL serveris vispirms apstiprinās, vai saņēmēja e-pasta adrese pakalpojumā YAHOO pastāv vai ne, pēc tam tā nosūtīs e-pastu uz YAHOO Server, kur saņēmējs var izgūt savus e-pastus no.

SMTPLIB

SMTPLIB ir pitona bibliotēka, kuru var izmantot kā SMTP klientu tāpat kā jūsu GMAIL, YAHOO, Thunderbird vai jebkuru citu e-pasta klientu, un to var izmantot e-pastu nosūtīšanai. Mēs varam veikt visus uzdevumus, izmantojot SMTPLIB klientu, ko mēs varam darīt ar tiem, kuriem ir grafiskā lietotāja saskarne.

Pēc noklusējuma tas nāk Python, ja jums tas nav, tad jūs varat instalēt, izmantojot šādu komandu.

[aizsargāts ar e-pastu]: ~ $ pip install smtplib

VAI Python3

[aizsargāts ar e-pastu]: ~ $ pip install smtplib

Pirmā e-pasta rakstīšana, izmantojot Python

Šajā apmācībā es kā sūtītāju izmantoju GMAIL kontu, kā arī izmantošu Python konsoli, tāpēc man būs vieglāk soli pa solim izskaidrot katru koda rindiņu. Lai sāktu darbu, mums jāļauj mūsu GMAIL piekļūt mazāk drošām lietotnēm.

Tāpēc piesakieties savā GMAIL kontā un pēc tam dodieties uz konta iestatījumiem.

Tagad pārliecinieties, vai ir ieslēgta piekļuve mazāk drošām lietotnēm.

Tagad atveriet savu python konsoli un sāciet rakstīt savu pirmo e-pastu, izmantojot Python

[e-pasts aizsargāts]: ~ $ python
Python 2.7.16 (noklusējums, 2019. gada 7. oktobris, 17:36:04)
[GCC 8.3.0] uz linux2

Lai iegūtu papildinformāciju, ierakstiet “palīdzība”, “autortiesības”, “kredīti” vai “licence”.

// importēt SMTP bibliotēku
>>> importēt smtplib
// izveidot savienojumu ar GMAIL serveri ar domēna nosaukumu un porta numuru (Šis iestatījums atšķiras
katram e-pasta pakalpojumu sniedzējam, lūdzu, apskatiet tālāk sniegto tabulu)
>>> mailobj = smtplib.SMTP ('smtp.gmail.com ”, 587)
// sasveicinies ar serveri
>>> mailobj.ehlo ()
(250, 'smtp.gmail.com jūsu rīcībā, [103.255.4.246] \ nSIZE35882577 \ n8BITMIME \ nSTARTTLS \
NENHANCEDSTATUSCODES \ nPIPELINING \ nCHUNKING \ nSMTPUTF8 ')
// 587. ports nozīmē, ka mēs izmantojam šifrētu TLS savienojumu, tāpēc sāciet šifrētu TLS
saziņa, izmantojot starttls (), lai mūsu akreditācijas dati un ziņojumi netiktu šņākti
>>> mailobj.starttls ()
(220, '2.0.0 Gatavs sākt TLS ')
// piesakieties savā GMAIL kontā, izmantojot e-pastu un paroli
>>> mailobj.login ('[aizsargāts ar e-pastu]', 's3cr3t_p4ssw0rd')
(235, '2.7.0 pieņemts ')
// norādiet sūtītāja un saņēmēja e-pasta adresi un e-pasta saturu
>>> mailobj.sendmail ('[email protected]', '[email protected]', 'Temats:
Sveika pasaule! \ n Sveika pasaule! šis ir mans pirmais sveiks pasaules e-pasts Python ')

// ciešs savienojums ar GMAIL serveri
>>> mailobj.atmest ()
(221, '2.0.0 aizvēršanas savienojums b6sm4519863lfi.72 - gsmtp ')

Iepriekš minētajā programmas paraugā norādīto saturu nomainiet ar savu. Ja neesat GMAIL lietotājs, varat izmantot sava pakalpojumu sniedzēja e-pasta serveri. Šeit ir dažu izplatīto e-pasta pakalpojumu sniedzēju domēnu vārdu un portu saraksts.

Nosaukums Servera domēna nosaukums Osta
Gmail smtp.gmail.com 587. lpp
Outlook / Hotmail smtp-pasts.perspektīva.com 587. lpp
Yahoo Mail smtp.pasts.yahoo.com 587. lpp
Verizon smtp.verizon.tīkls 465
Comcast smtp.comcast.tīkls 587. lpp

Daži vārdi par IMAP

Tāpēc mēs tikko izpētījām, ka SMTP tiek izmantots e-pasta ziņojumu sūtīšanai, bet kam domāts IMAP (interneta piekļuves ziņojumapmaiņas protokols)? SMTP nevar izmantot, lai meklētu un saņemtu e-pastus no servera, šim nolūkam tiek izmantots IMAP vai POP3 protokols.

IMAPCLIENT, IMAPLIB un PYZMAIL

Python ir divas galvenās bibliotēkas, kuras var izmantot kā IMAP klientu, lai atrastu, izgūtu un izdzēstu e-pastus no pasta servera. Python ir noklusējums imaplib bibliotēka, bet cita ārējā bibliotēka nepielūdzams ir efektīvāka un viegli lietojama. Šajā apmācībā mēs to izmantosim nepielūdzams lai ielādētu e-pastus no pasta servera.

Problēma ar nepielūdzams ir tas, ka tas izgūst e-pastus no pasta servera neapstrādātā formātā. Tātad, mums tas būs vajadzīgs pyzmail bibliotēka kā lietotājdraudzīgas izejas parsētājs. Lai instalētu abas bibliotēkas, ierakstiet

[e-pasts aizsargāts]: ~ $ sudo pip install imapclient
[aizsargāts ar e-pastu]: ~ $ sudo pip install pyzmail

E-pastu saņemšana no pasta servera

Tagad mēs uzzināsim, kā meklēt un lejupielādēt e-pastu no pasta servera, izmantojot imapclient. Mēs izmantosim imapclient, lai meklētu un lejupielādētu e-pastus no servera, pēc tam izmantosim pyzmail, lai parsētu šo neapstrādāto saturu. Iesim

// imapclient bibliotēkas importēšana
>>> importēt nepietiekami
// Izveidojiet savienojumu ar GMAIL IMAP serveri
>>> obj = nepielūdzams.IMAPClient ('imap.gmail.com ', ssl = True)
// Piesakieties savā e-pasta kontā, izmantojot savus akreditācijas datus
>>> obj.login ('[aizsargāts ar e-pastu]', 's3cr4tp4ss')
"[e-pasts aizsargāts] autentificēts (veiksmīgi)"
// Atlasiet lasāmo ziņojumu mapi i.e INBOX, RAKSTI, SŪTĪTAS vēstules
>>> obj.select_folder ('INBOX', tikai lasāms = True)
'EXISTS': 830, 'PERMANENTFLAGS': (), 'HIGHESTMODSEQ': 112999, 'UIDNEXT': 931,
'FLAGS': ('\\ Answered', '\\ Flagged', '\\ Draft', '\\ Deleted', '\\ Seen',
'$ NotPhishing', '$ Phishing'), 'UIDVALIDITY': 1, 'TIKAI LASĪT': ["], 'RECENT': 0
// Meklējiet ziņojumus savā iesūtnē vai lietojiet filtru, tiks parādīts zemāk esošais filtrs
jūs ziņojumus, kas saņemti pēc 2019. gada 25. oktobra
>>> mail_ids = obj.meklēšana (['SINCE', '25 -Oct-2019 '])
>>> mail_ids
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
// Sarakstā “mail_ids” ir saraksts ar e-pasta ID, kas saņemti kopš 2019. gada 25. oktobra,
e-pastu varat lejupielādēt, izmantojot imapclient fetch funkciju.
>>> raw_mail = obj.ielādēt ([919], ['BODY []', 'FLAGS'])
// Tagad mainīgā raw_mail saturs ir neapstrādātā formātā, un to nevar parādīt vietnē
ekrāns, tāpēc mums ir nepieciešams parsētājs, lai parsētu šo saturu lietotājam draudzīgai izejai
>>> importēt pyzmail
>>> ziņojums = pyzmail.PyzMessage.rūpnīca (raw_mail [919] ['BODY []'])
// Tagad e-pasts ir parsēts un saglabāts ziņojuma mainīgajā, lai iegūtu tematu
e-pastu, izmantojiet funkciju get_subject
>>> ziņa.get_subject ()
u "Izvelciet savas prasmes šajā Halovīnā ar 25% atlaidi"
// Līdzīgi var redzēt detalizētu informāciju par sūtītāju
>>> ziņojums.get_addresses ('no')
[(u'Usama Azad ',' [e-pasts aizsargāts] ')]
>>> ziņojums.get_addresses ('uz')
[(u '[aizsargāts ar e-pastu]', '[aizsargāts ar e-pastu]')]
// Lai iegūtu e-pasta pamattekstu, ierakstiet
>>> ziņa.teksta_daļa.get_payload ().atšifrēt (ziņojums.teksta daļa.apzīmējums)
u ”Sveiks! Izbaudiet 25% cenu mūsu augstākās klases kursos ”

Ja jums ir konts citā e-pasta pakalpojumu sniedzējā, izņemot GMAIL, varat pieteikties viņu IMAP serverī. Šeit ir dažu slavenu pasta pakalpojumu sniedzēju IMAP domēnu vārdu saraksts.

Nodrošinātājs IMAP servera domēna nosaukums
YAHOO imap.pasts.yahoo.com
Hotmail / Outlook imap-pasts.perspektīva.com
Verizon ienākošie.verizon.tīkls
Comcast imap.comcast.tīkls
AT&T imap.pasts.att.tīkls

E-pasta dzēšana no IMAP servera

Līdzīgi e-pastu meklēšanai un izgūšanai no servera, arī e-pastus varat izdzēst no sava pasta servera, izmantojot to uid. Vienkārši izpildiet norādītās darbības

// Lai izdzēstu e-pastu, jums jāgriežas tikai “False”, lai iegūtu rakstīšanas piekļuvi savam
e-pastus
>>> obj.select_folder ('INBOX', tikai lasāms = nepatiess)
>>> mail_ids = obj.meklēšana (['SINCE', '25 -Oct-2019 '])
>>> mail_ids
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
 
// Pēc palaišanas zem komandas norādiet e-pasta uid vai e-pasta uid sarakstu,
jūsu e-pasts pazudīs no INBOX.
>>> obj.dzēst_ziņojumus (919)
919: ('\\ Redzēts', '\\ Dzēsts')
 
// Šī komanda neatgriezeniski izdzēsīs jūsu e-pastus no pasta servera
>>> obj.izmest ()
('Veiksme', [])

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

Izveidojiet pats savu dzimšanas dienas atgādinājumu

Nākamajos mēnešos jums ir draugu dzimšanas dienas, un jūs vēlaties viņiem novēlēt viņu dzimšanas dienas. Bet jūsu birojā ir daudz darba, un pastāv iespēja, ka aizmirsīsit viņiem novēlēt. Tātad šo uzdevumu var automātiski veikt, izmantojot pitonu. Šis ir kods šī uzdevuma veikšanai.

// moduļu importēšana
importa re
// os moduli izmanto operētājsistēmas uzdevumu veikšanai, t.i.e piekļuve direktorijām
importēt os
importēt datumu
importēt smtplib
 
// definējot funkciju, kas sūtīs e-pastus
def send_mail (saņēmēja_pasta_adrese, vārds):
sender_mail_address = "[e-pasts aizsargāts]"
passwd = "senderPasswd"
// savienojums ar Gmail serveri ar domēna vārdu un porta numuru
obj = smtplib.SMTP ('smtp.gmail.com ”, 587)
obj.ehlo ()
obj.starttls ()
// piesakoties savā Gmail kontā
obj.pieteikšanās (sender_mail_address, passwd)
// pasta sūtīšana uz “reciever_mail_address”.
obj.sendmail (sender_mail_address, reciever_mail_address, "Subject: BirthDay Wishing Mail \ n \ n HappyBirthday" + vārds)
// savienojuma izbeigšana
obj.atmest ()
// Galvenais korpuss
// došanās uz direktoriju, kurā atrodas fails ar datiem
os.chdir ("path_to_birthday_data_file")
kamēr 1:
// iegūt datumu un šī brīža laiku
šodien = datetime.datums Laiks.šodien ()
šodien = str (šodien)
// iegūt kārtējo gadu, mēnesi, dienu, stundu, minūti un sekundi
pašreizējais_gads = šodien [0: 4]
pašreizējais_mēness = šodien [5: 7]
pašreizējā_diena = šodien [8:10]
pašreizējā_stunda = šodien [11:13]
current_minute = šodien [14:16]
current_sec = šodien [17:19]
// Dzimšanas datnes atvēršana objektā 'birthday_file' lasīšanas režīmā
birthday_file = atvērts ('birthday_file', 'r')
// saglabājot visas rindiņas “birthday_file” rindu sarakstā
rindas = dzimšanas dienas_fails.lasāmrindas ()
// objekta 'birthday_file' aizvēršana
birthday_file.aizvērt ()
// lasot katru rindu, izmantojot cilpu
līnijai līnijās:
// izveidojot regulāru izteiksmi, lai datumu atrastu 'birthday_file'
dateEx = re.kompilēt (r "\ d 4 - \ d 2 - \ d 2")
findDate = dateEx.meklēt (rinda)
datums = atrastDatums.grupa ()
// iegūstam datni birthday_month un birthday_day no faila
dzimšanas dienas_mēness = datums [5: 7]
birthday_day = datums [8:10]
// izveidojot regulāru izteiksmi, lai atrastu pasta adresi no birthday_file
mailEx = re.kompilēt (r "\ w * @ \ w * *.com ")
findMail = mailEx.meklēt (rinda)
reciever_mail = findMail.grupa ()
// regulāras izteiksmes veikšana, lai atrastu personas vārdu
nameEx = re.kompilēt (r "\ w *")
findName = nameEx.meklēt (rinda)
name = findName.grupa ()
// pārbaudīt, vai kādam pienāk dzimšanas diena vai nē
ja pašreizējais mēnesis == dzimšanas dienas mēnesis un = pašreizējais_ diena == dzimšanas dienas_ diena:
// pasta sūtīšana precīzi pulksten 08:00
ja current_hour == '08' un current_minute == '00' un current_sec == '00':
// izsaucot funkciju 'send_mail'
send_mail (saņēmēja_mail, vārds)

Tagad mēs izveidojam "birthday_file", kurā mēs saglabājam vārdus, e-pasta adreses un to dzimšanas datumu. Šis ir vienkāršs teksta fails un izskatās šādi.

Paskaidrojums

Mēs lasīsim šo failu, izmantojot python skriptu, un pārbaudīsim, kura dzimšanas diena ir, un novēlēsim viņiem. Pirmkārt, mēs importēsim dažus moduļus. DATETIME modulim ir funkcijas, kas dod mums pašreizējo datumu, laiku un daudz ko citu. Bet mēs to izmantosim tikai, lai atrastu pašreizējo datumu un laiku. SMTPLIB modulis tiek izmantots pasta sūtīšanai, un tas ir paskaidrots iepriekš. RE modulim ir funkcijas, kuras tiek izmantotas, lai atrastu regulāru izteiksmi no virknes.

Šajā skriptā mēs definējam funkciju “send_mail”, kas sūta vēstules uz “reciever_mail_address”, kuras vārds ir “name”. Abi argumenti tiek pārsūtīti funkcijai no galvenā ziņojuma pamatteksta. Skripta galvenajā daļā mēs redzēsim, kā mēs atrodam “reciever_mail_address” un “name”.

E-pasta ziņojumu sūtīšana, izmantojot smtplib, tika izskaidrota iepriekš, tāpēc jūs varat to izlasīt, un šeit tas netiks apspriests.

Galvenajā pamattekstā mēs dodamies uz direktoriju, kurā esam saglabājuši 'birthday_file', izmantojot 'os.chdir () '. Tad mums ir "kamēr cilpa", kas vienmēr ir taisnība, tāpēc tā nepārtraukti pārbaudīs dzimšanas dienu. Tagad mēs iegūstam pašreizējo datumu un laiku un saglabājam to mainīgajā “today”. Tas izskatās šādi.

2019-11-01 16:19:07.144925

Izmantojot šo daudzumu indeksus, mēs iegūsim gadu, mēnesi, dienu, stundu, minūtes un sekundes. Pēc tam mēs atvērsim birthday_file objektā 'birthday_file' lasīšanas režīmā, tāpēc mēs to varam lasīt tikai. Tagad mēs saglabāsim visas šī faila rindas līniju sarakstā. 'birthday_file.readlines () 'saglabās katru rindu sarakstā' lines '. Pēc tam mēs aizvērsim birthday_file, izmantojot 'birthday_file.aizvērt () 'funkcija.

Tagad mēs katru rindu lasīsim pa vienam, izmantojot cilpu. Katrā rindiņā “birthday_file” ir pieejami tikai vienas personas dati, tāpēc šajā ciklā mēs vienlaikus nolasām tikai vienas personas datus.

Pēc tam mēs iegūsim dzimšanas datumu, e-pasta adresi un personas vārdu, izmantojot RE moduli. Kā mēs esam uzrakstījuši datumu šādā formātā

GGGG-MM-DD

Tāpēc mēs izveidosim regulāru izteiksmi 'dateEx', kas atrod šo formātu rindā.

re.kompilēt (r ”\ d 4 - \ d 2 - \ d 2”)

Virs komandas atrodiet virkni, kurai ir “4 cipari”, kam seko “-”, pēc tam “2 cipari”, kam seko “-” un “2 cipari”. Tas mums norādīs personas dzimšanas datumu, tāpēc no šī izteiciena mēs iegūsim dzimšanas dienu un dzimšanas mēnesi.

Tāpat mēs atradīsim e-pasta adresi, izmantojot parastās izteiksmes. Pēc tam mēs salīdzināsim dzimšanas dienas mēnesi un pašreizējo mēnesi un dzimšanas dienas dienu un pašreizējo dienu. Ja šie nosacījumi ir izpildīti, mēs nosūtīsim dzimšanas dienas e-pastu, izmantojot funkciju send_mail ar precizitāti '08: 00 '.

Skripta palaišana automātiski, izmantojot Cronjob

Tagad mēs pārliecināsimies, vai šis pitona skripts darbojas katru reizi. Lai to izdarītu, mēs pievienosim šo uzdevumu crontab. Crontab, lietojot Linux, tiek izmantots, lai automātiski veiktu uzdevumus. Tas, kas mums jādara, ir vienkārši pievienot uzdevumu crontab. Lai to izdarītu, veiciet norādītās darbības.

  1. Atveriet crontab, lai pievienotu uzdevumu savam terminālim, izmantojot šādu komandu
[aizsargāts ar e-pastu]: ~ $ crontab -e
  1. Šī faila beigās ievadiet šādu komandu bez #
@reboot python path_to_the_script

Iepriekš norādītās komandas ļaus jūsu sistēmai palaist python skriptu ikreiz, kad restartējat sistēmu. Tādā veidā jūsu sistēma palaidīs python skriptu katru reizi, kad sistēma būs ieslēgta.

Peles kreisā klikšķa poga nedarbojas operētājsistēmā Windows 10
Ja ar klēpjdatoru vai galddatoru izmantojat īpašu peli, bet nedarbojas peles kreisās klikšķa poga kādu iemeslu dēļ operētājsistēmā Windows 10/8/7 šeit...
Rakstot Windows 10, kursors lec vai pārvietojas nejauši
Ja atklājat, ka peles kursors automātiski, nejauši lec vai pārvietojas pats, rakstot Windows klēpjdatorā vai datorā, daži no šiem ieteikumiem var palī...
Kā mainīt peles un skārienpaliktņu ritināšanas virzienu operētājsistēmā Windows 10
Pele un SkārienpaliktnisTas ne tikai padara skaitļošanu vienkāršu, bet arī efektīvāku un mazāk laikietilpīgu. Mēs nevaram iedomāties dzīvi bez šīm ier...