Python

Sähköpostien lähettäminen Pythonilla

Sähköpostien lähettäminen Pythonilla
Sähköpostiviestien lähettäminen, tarkistaminen ja vastaaminen on aikaa vievä tehtävä, varsinkin kun teet sen suurelle joukolle ihmisiä tai asiakkaita, joissa sinun on vain vaihdettava vastaanottajan nimi, osoite, ikä ja muut pienet asiat. Sinulle olisi erittäin vaikeaa kirjoittaa ohjelma, joka pystyy käsittelemään kaikenlaisia ​​henkilökohtaisia ​​/ yrityssähköpostejasi, mutta silti voit automatisoida tässä suhteessa paljon tavaraa, mikä lopulta säästää paljon aikaa.

Haluat esimerkiksi lähettää asiakkaillesi muistutuksen heidän jäljellä olevista laskuistaan ​​ja sinulla on kaikki asiakastiedot, kuten heidän puhelinnumeronsa, osoite, ikä jne., Excel-taulukossa tai tietokannassa, sen sijaan, että tekisit sen manuaalisesti, voit kirjoittaa yksinkertainen ohjelma Pythonissa tekemään se automaattisesti. Tässä opetusohjelmassa opit, miten sähköpostiprotokolla toimii ja kuinka voit automatisoida prosessin säästääksesi arvokasta aikaa.

Sana SMTP: stä

SMTP (Simple Mail Transfer Protocol) on postipalvelun vastaava tietokoneistettu versio. Se on protokolla, joka toimii TCP / IP-verkon sovelluskerroksessa. Se on vakioprotokolla sähköpostin lähettämiseen ja vastaanottamiseen Internetissä. Postinsiirtoprosessi koostuu sähköpostipalvelimista ja asiakkaista, jotka lähettävät ja vastaanottavat sähköposteja toisilleen.

Esimerkiksi sinulla on GMAIL-tili ja haluat lähettää sähköpostia ystävällesi hänen YAHOO-tilillään. Kirjoitat sähköpostin ja painat Lähetä, mutta taustaprosessi on hieman monimutkainen, ja tämän prosessin ymmärtämiseksi sinun on ensin ymmärrettävä SMTP. SMTP-sähköpostiohjelmasi lähettää ensin HELO (tai EHLO) GMAIL-palvelimelle, voit sanoa, että tämä komento tai otsikko vastaa Isäntä otsikko HTTP-protokollassa ja sitä käytetään palvelimen tunnistamiseen verkkotunnuksen avulla. HELO: n tai EHLO: n jälkeen asiakas todentaa itsensä palvelimelle annetulla käyttäjätunnuksella ja salasanalla AUTH komento. Sitten se määrittää lähettäjän ja vastaanottajan sähköpostiosoitteen ja sitten viestin rungon ja lähettää sähköpostin GMAIL-palvelimelle. GMAIL-palvelin vahvistaa ensin, onko vastaanottajan sähköpostiosoite YAHOO: ssa olemassa vai ei, sitten se lähettää sähköpostin YAHOO-palvelimelle, josta vastaanottaja voi noutaa sähköpostinsa.

SMTPLIB

SMTPLIB on python-kirjasto, jota voidaan käyttää SMTP-asiakkaana kuten GMAIL, YAHOO, Thunderbird tai mikä tahansa muu sähköpostiohjelma, ja sitä voidaan käyttää sähköpostien lähettämiseen. Voimme suorittaa kaikki tehtävät SMTPLIB-asiakasohjelman avulla, jotka voimme tehdä niiden kanssa, joilla on graafinen käyttöliittymä.

Se tulee oletusarvoisesti Pythonissa. Jos sinulla ei ole sitä, voit asentaa sen seuraavalla komennolla.

[sähköposti suojattu]: ~ $ pip install smtplib

TAI Pythonissa3

[sähköposti suojattu]: ~ $ pip install smtplib

Ensimmäisen sähköpostisi kirjoittaminen Pythonilla

Tässä opetusohjelmassa käytän GMAIL-tiliä lähettäjänä, ja käytän myös Python-konsolia, joten minun on helpompi selittää jokainen koodirivi askel askeleelta. Aloittamiseksi meidän on sallittava GMAIL: n käyttö vähemmän turvallisiin sovelluksiin.

Joten kirjaudu GMAIL-tilillesi ja siirry sitten tilin asetuksiin.

Varmista nyt, että vähemmän turvallisten sovellusten käyttö on käytössä.

Avaa nyt python-konsoli ja ala kirjoittaa ensimmäistä sähköpostia Pythonilla

[sähköposti suojattu]: ~ $ python
Python 2.7.16 (oletus, 7. lokakuuta 2019, 17:36:04)
[GCC 8.3.0] linux2: lla

Kirjoita "help", "copyright", "credits" tai "license" saadaksesi lisätietoja.

// tuo SMTP-kirjasto
>>> tuo smtplib
// muodosta yhteys GMAIL-palvelimeen toimialueen nimellä ja portin numerolla (Tämä asetus eroaa
jokainen sähköpostipalvelun tarjoaja, katso alla oleva taulukko)
>>> mailobj = smtplib.SMTP ('smtp.gmail.com ', 587)
// tervehdi palvelinta
>>> mailobj.ehlo ()
(250, smtp.gmail.fi palveluksessasi, [103.255.4.246] \ nSIZE35882577 \ n8BITMIME \ nSTARTTLS \
NENHANCEDSTATUSCODES \ nPIPELINING \ nCHUNKING \ nSMTPUTF8 ')
// Portti 587 tarkoittaa, että käytämme salattua TLS-yhteyttä, joten aloita salattu TLS
kommunikointi starttls: n () avulla, jotta tunnistetietojamme ja viestejämme ei haisteta
>>> mailobj.starttls ()
(220, '2.0.0 Valmiina aloittamaan TLS ')
// kirjaudu GMAIL-tilillesi sähköpostilla ja salasanalla
>>> mailobj.kirjautuminen ('[email protected]', 's3cr3t_p4ssw0rd')
(235, '2.7.0 Hyväksytty ')
// määritä lähettäjän ja vastaanottajan sähköpostiosoite ja sähköpostin sisältö
>>> mailobj.sendmail ('[email protected]', '[email protected]', 'Aihe:
Hei maailma! \ n Hei maailma! tämä on ensimmäinen hello world email Pythonissa ')

// sulje yhteys GMAIL-palvelimeen
>>> mailobj.lopettaa()
(221, '2.0.0 sulkeutuva liitäntä b6sm4519863lfi.72 - gsmtp ')

Korvaa annettu sisältö yllä olevassa esimerkkiohjelmassa omalla. Jos et ole GMAIL-käyttäjä, voit käyttää palveluntarjoajasi sähköpostipalvelinta. Tässä on luettelo joidenkin yleisten sähköpostipalvelujen verkkotunnuksista ja porteista.

Nimi Palvelimen verkkotunnus Satama
Gmail smtp.gmail.com 587
Outlook / Hotmail smtp-mail.näkymät.com 587
Yahoo sähköposti smtp.posti.yahoo.com 587
Verizon smtp.verizon.netto 465
Comcast smtp.Comcast.netto 587

Jotkut sanat IMAP: sta

Joten olemme juuri tutkineet, että SMTP: tä käytetään sähköpostiviestien lähettämiseen, mutta mikä on IMAP (Internet Access Messaging Protocol)? SMTP: tä ei voida käyttää palvelimelta lähetettyjen sähköpostien hakemiseen ja vastaanottamiseen, tähän tarkoitukseen käytetään IMAP- tai POP3-protokollaa.

IMAPCLIENT, IMAPLIB ja PYZMAIL

Pythonissa on kaksi suurta kirjastoa, joita voidaan käyttää IMAP-asiakkaana etsimään, hakemaan ja poistamaan sähköposteja sähköpostipalvelimelta. Pythonilla on oletusarvo imaplib kirjasto, mutta toinen ulkoinen kirjasto sietämätön on tehokkaampi ja helppokäyttöisempi. Tässä opetusohjelmassa käytämme sietämätön hakea sähköposteja sähköpostipalvelimelta.

Ongelma sietämätön on, että se hakee sähköpostit palvelimelta raakamuodossa. Joten tarvitsemme pyzmail kirjasto jäsentäjänä käyttäjäystävälliselle ulostulolle. Asenna molemmat kirjastot kirjoittamalla

[sähköposti suojattu]: ~ $ sudo pip install imapclient
[sähköposti suojattu]: ~ $ sudo pip install pyzmail

Sähköpostisi saaminen postipalvelimelta

Opimme nyt hakemaan ja lataamaan sähköpostia sähköpostipalvelimelta imapclient-sovelluksen avulla. Hakemme ja lataamme sähköposteja palvelimelta imapclient-sovelluksen avulla, sitten jäsennämme tätä raakaa sisältöä pyzmaililla. Katsotaanpa

// tuo imapclient-kirjasto
>>> tuoda ongelmatonta
// Yhdistä GMAIL: n IMAP-palvelimeen
>>> obj = imapclient.IMAPClient ('imap.gmail.com ', ssl = True)
// Kirjaudu sisään sähköpostitiliisi kirjautumistiedoillasi
>>> obj.sisäänkirjautuminen ('[email protected]', 's3cr4tp4ss')
'[sähköposti suojattu] todennettu (onnistunut)'
// Valitse luettava viestikansio i.e Saapuneet, Luonnokset, Lähetetyt sähköpostit
>>> obj.select_folder ('INBOX', vain luku = True)
'EXISTS': 830, 'PYSYVÄT LIPUT': (), 'HIGHESTMODSEQ': 112999, 'UIDNEXT': 931,
'LIPUT': ('\\ vastattu', '\\ merkitty', '\\ luonnos', '\\ poistettu', '\\ nähty',
'$ NotPhishing', '$ Phishing'), 'UIDVALIDITY': 1, 'VAIN LUE': ["], 'RECENT': 0
// Hae viestejäsi postilaatikostasi tai käytä suodatinta, alla oleva suodatin näkyy
sinulle sähköpostit, jotka sait 25. lokakuuta-2019 jälkeen
>>> mail_ids = obj.haku (['SINCE', '25 -Oct-2019 '])
>>> mail_ids
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
// Luettelo "mail_ids" sisältää luettelon sähköpostitunnuksista, jotka on vastaanotettu 25. lokakuuta 2019 jälkeen,
voit ladata sähköpostin käyttämällä imapclient-noutotoimintoa.
>>> raw_mail = obj.hae ([919], ['BODY []', 'LIPUT']]
// Nyt raw_mail-muuttujan sisältö on raakamuodossa, sitä ei voida näyttää
näyttö suoraan, joten tarvitsemme jäsentimen jäsentääksesi tämän sisällön käyttäjäystävälliseksi ulostuloksi
>>> Tuo pyzmail
>>> viesti = pyzmail.PyzMessage.tehdas (raw_mail [919] ['BODY []'])
// Nyt sähköposti jäsennetään ja tallennetaan viestimuuttujaan, jotta saat aiheen
käytä sähköpostia, käytä get_subject-toimintoa
>>> viesti.get_subject ()
u'Pukeudu taitoihisi tänä Halloweenina 25%: n alennuksella '
// Vastaavasti näet lähettäjän tiedot
>>> viesti.get_addresses ('from')
[(u'Usama Azad ',' [sähköposti suojattu] ')]
>>> viesti.get_addresses ('asti')
[(u '[sähköposti suojattu]', '[sähköposti suojattu]')]
// Saadaksesi sähköpostin rungon, kirjoita
>>> viesti.text_part.get_payload ().purkaa (viesti.text_part.merkkisarja)
u ”Hei! Nauti tasaisesta 25%: sta premium-kursseillamme ”

Jos sinulla on tili jossakin muussa sähköpostipalvelupalvelussa kuin GMAIL, voit kirjautua heidän IMAP-palvelimelleen. Tässä on joidenkin tunnettujen sähköpostipalvelujen IMAP-verkkotunnusluettelo.

Palveluntarjoaja Verkkotunnus IMAP-palvelimelle
YAHOO imap.posti.yahoo.com
Hotmail / Outlook imap-sähköposti.näkymät.com
Verizon saapuva.verizon.netto
Comcast imap.Comcast.netto
AT&T imap.posti.att.netto

Sähköpostin poistaminen IMAP-palvelimelta

Samoin kuin hakea ja hakea sähköposteja palvelimelta, voit myös poistaa sähköposteja sähköpostipalvelimelta niiden uid-tunnuksen avulla. Seuraa vain annettuja vaiheita

// Sähköpostin poistamiseksi sinun on muutettava vain luku -asetukseksi False saadaksesi kirjoitusoikeuden sähköpostiisi
sähköpostit
>>> obj.select_folder ('INBOX', vain luku = väärä)
>>> mail_ids = obj.haku (['SINCE', '25 -Oct-2019 '])
>>> mail_ids
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
 
// Anna sähköpostiosoite tai sähköpostiosoiteluettelo, kun olet suorittanut alla olevan komennon,
sähköpostisi katoaa INBOXista.
>>> obj.poista_viestit (919)
919: ('\\ Nähty', '\\ Poistettu')
 
// Tämä komento poistaa sähköpostisi pysyvästi postipalvelimelta
>>> obj.pyyhkiä()
('Menestys', [])

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

Omien syntymäpäivämuistutusten tekeminen

Sinulla on ystävien syntymäpäivät tulevina kuukausina ja haluat toivoa heille heidän syntymäpäivänään. Mutta sinulla on paljon työtä toimistossasi ja on mahdollisuus, että unohdat toivoa heille. Joten tämä tehtävä voidaan suorittaa automaattisesti pythonilla. Seuraava on koodi tämän tehtävän suorittamiseksi.

// tuodaan moduulit
tuoda uudelleen
// os-moduulia käytetään käyttöjärjestelmän tehtävien suorittamiseen i.e pääsy hakemistoihin
tuonti os
Tuo päivämäärä
tuoda smtplib
 
// määritetään toiminto, joka lähettää sähköposteja
def send_mail (vastaanottaja_mail_osoite, nimi):
sender_mail_address = "[sähköposti suojattu]"
passwd = "senderPasswd"
// yhdistetään Gmail-palvelimeen verkkotunnuksella ja portin numerolla
obj = smtplib.SMTP ('smtp.gmail.com ', 587)
obj.ehlo ()
obj.starttls ()
// kirjaudut sisään Gmail-tiliisi
obj.kirjaudu (sender_mail_address, passwd)
// postin lähettäminen osoitteeseen 'reciever_mail_address'.
obj.sendmail (sender_mail_address, reciever_mail_address, "Subject: BirthDay Wishing Mail \ n \ n HappyBirthday" + nimi)
// yhteys päättyy
obj.lopettaa()
// Päärunko
// siirtyminen hakemistoon, jossa on tietoja sisältävä tiedosto
os.chdir ("polku_syntymäpäivä_tietotiedosto")
kun taas 1:
// haetaan nykyisen hetken päivämäärä ja aika
tänään = päivämäärä.treffiaika.tänään()
tänään = str (tänään)
// kuluvan vuoden, kuukauden, päivän, tunnin, minuutin ja sekunnin saaminen
current_year = tänään [0: 4]
current_month = tänään [5: 7]
current_day = tänään [8:10]
current_hour = tänään [11:13]
current_minute = tänään [14:16]
current_sec = tänään [17:19]
// syntymäpäivätiedoston avaaminen 'birthday_file' -objektissa lukutilassa
syntymäpäivä_tiedosto = avoin ('syntymäpäivä_tiedosto', 'r')
// tallennetaan kaikki syntymäpäivä_tiedoston rivit riviluetteloon
rivit = syntymäpäivä_tiedosto.lukulinjat ()
// sulkee 'syntymäpäivä_tiedosto' -objektin
syntymäpäivä_tiedosto.kiinni()
// lukee jokaisen rivin käyttämällä silmukkaa
riville linjoilla:
// säännöllisen lausekkeen tekeminen päivämäärän löytämiseksi syntymäpäivätiedostosta
dateEx = re.kääntää (r "\ d 4 - \ d 2 - \ d 2")
findDate = päivämääräEx.haku (rivi)
date = findDate.ryhmä()
// syntymäpäiväkuukauden ja syntymäpäiväpäivä tiedostosta
syntymäpäivä_kuukausi = päivämäärä [5: 7]
syntymäpäivä_päivä = päiväys [8:10]
// säännöllisen lausekkeen tekeminen sähköpostiosoitteen löytämiseksi syntymäpäivätiedostosta
mailEx = uudelleen.kääntää (r "\ w * @ \ w *.com ")
findMail = mailEx.haku (rivi)
reciever_mail = findMail.ryhmä()
// säännöllisen lausekkeen tekeminen henkilön nimen löytämiseksi
nameEx = re.kääntää (r "\ w *")
findName = nimiEx.haku (rivi)
nimi = löytönimi.ryhmä()
// tarkistetaan onko jonkun syntymäpäivä tulossa vai ei
jos nykyinen_kuukausi == syntymäpäivä_kuukausi ja = nykyinen_päivä == syntymäpäivä_päivä:
// postin lähettäminen tarkalleen klo 8.00
jos current_hour == '08' ja current_minute == '00' ja current_sec == '00':
// kutsutaan "send_mail" -toimintoa
send_mail (vastaanottaja_mail, nimi)

Nyt teemme "syntymäpäivä_tiedosto", johon tallennamme nimet, sähköpostiosoitteet ja heidän syntymäaikansa. Tämä on yksinkertainen tekstitiedosto ja näyttää tältä.

Selitys

Luemme tämän tiedoston python-komentosarjalla ja tarkistamme kenen syntymäpäivä on ja toivotamme heille. Ensinnäkin tuomme joitain moduuleja. DATETIME-moduulissa on toimintoja, jotka antavat meille nykyisen päivämäärän ja kellonajan ja paljon muuta. Mutta käytämme tätä vain nykyisen päivämäärän ja kellonajan löytämiseen. SMTPLIB-moduulia käytetään postin lähettämiseen, ja se on selitetty edellä. RE-moduulissa on toimintoja, joita käytetään säännöllisen lausekkeen etsimiseen merkkijonosta.

Tässä komentosarjassa määritellään `` send_mail '' -toiminto, joka lähettää postin vastaanottajan_osoitteelle, jonka nimi on 'nimi'. Molemmat argumentit välitetään funktiolle msg: n pääosasta. Skriptin pääosassa näemme, kuinka löydämme 'vastaanottaja_mail_osoite' ja 'nimi'.

Sähköpostin lähettäminen smtplibin avulla on selitetty yllä, joten voit lukea sen, eikä siitä keskustella täällä.

Päärungossa siirrymme hakemistoon, johon olemme tallentaneet 'syntymäpäivä_tiedosto' käyttämällä 'os.chdir () '. Sitten meillä on 'while loop', joka on aina totta, joten se tarkistaa syntymäpäivän jatkuvasti. Nyt saamme nykyisen päivämäärän ja kellonajan ja tallennamme sen 'tänään' -muuttujaan. Se näyttää tältä.

2019-11-01 16:19:07.144925

Otamme vuosi, kuukausi, päivä, tunti, minuutit ja sekunnit näiden määrien indekseillä. Tämän jälkeen avataan syntymäpäivä_tiedosto objektissa 'syntymäpäivä_tiedosto' lukutilassa, joten voimme vain lukea sen. Nyt tallennamme kaikki tämän tiedoston rivit riviluetteloon. 'syntymäpäivä_tiedosto.readlines () 'tallentaa jokaisen rivin rivien luetteloon. Tämän jälkeen suljetaan syntymäpäivä_tiedosto käyttämällä 'syntymäpäivä_tiedosto.sulje () '-toiminto.

Nyt luemme jokaisen rivin yksi kerrallaan silmukalle. Kullakin rivillä vain yhden henkilön tiedot ovat käytettävissä "syntymäpäivä_tiedostossa", joten luemme vain yhden henkilön tiedot kerralla tässä silmukassa.

Tämän jälkeen otamme syntymäajan, sähköpostiosoitteen ja RE-moduulia käyttävän henkilön nimen. Kuten olemme kirjoittaneet päivämäärän seuraavassa muodossa

VVVV-KK-PP

Joten teemme säännöllisen lausekkeen 'dateEx', joka löytää tämän muodon riviltä.

re.kääntää (r ”\ d 4 - \ d 2 - \ d 2”)

Etsi yllä olevan komennon merkkijono, jossa on '4 numeroa', jota seuraa '-', sitten '2 numeroa', jota seuraa '-' ja '2 numeroa'. Tämä antaa meille henkilön syntymäajan, joten otamme syntymäpäivä ja syntymäkuukausi tästä lausekkeesta.

Samoin löydämme sähköpostiosoitteen säännöllisten lausekkeiden avulla. Tämän jälkeen verrataan syntymäpäiväkuukausi ja nykyinenkuukausi ja syntymäpäiväpäivä ja nykyinen päivä. Jos nämä ehdot täyttyvät, lähetämme syntymäpäiväsähköpostin 'send_mail' -toiminnolla tarkalleen '08: 00 '.

Suoritetaan komentosarja automaattisesti Cronjobin kautta

Nyt varmistamme, että tämä python-komentosarja toimii joka kerta. Tätä varten lisäämme tämän tehtävän crontabiin. Crontabia, linuxissa, käytetään tehtävien suorittamiseen automaattisesti. Meidän on vain lisättävä tehtävä crontabiin. Voit tehdä sen noudattamalla annettuja vaiheita.

  1. Avaa crontab lisätäksesi tehtävän päätelaitteeseesi seuraavan komennon avulla
[sähköposti suojattu]: ~ $ crontab -e
  1. Kirjoita tämän tiedoston loppuun seuraava komento ilman #
@reboot python-polku_sivulle

Yllä olevien komentojen avulla järjestelmä voi suorittaa python-komentosarjan joka kerta, kun käynnistät järjestelmän uudelleen. Tällä tavalla järjestelmä suorittaa python-komentosarjan joka kerta, kun järjestelmä on päällä.

How to change Left & Right mouse buttons on Windows 10 PC
It's quite a norm that all computer mouse devices are ergonomically designed for right-handed users. But there are mouse devices available which are s...
Emulate Mouse clicks by hovering using Clickless Mouse in Windows 10
Using a mouse or keyboard in the wrong posture of excessive usage can result in a lot of health issues, including strain, carpal tunnel syndrome, and ...
Add Mouse gestures to Windows 10 using these free tools
In recent years computers and operating systems have greatly evolved. There was a time when users had to use commands to navigate through file manager...