Lähetä sähköpostia Pythonilla

Oppimisharjoituksena kaivoin hiljattain Python 3: een nähdäksesi, kuinka voisin laukaista joukon sähköposteja. Tuotantoympäristössä voi olla suoraviivaisempia menetelmiä, mutta seuraava toimi minulle hyvin.

Joten tässä on skenaario: Sinulla on joukko kontakteja. Ja haluat lähettää viestin jokaiselle näistä yhteyshenkilöistä samalla, kun lisäät "Hyvä [nimi]" viestin yläosaan.

Yksinkertaisuuden vuoksi voit tallentaa yhteystiedot tiedostoon eikä tietokantaan. Voit myös tallentaa lähetettävän viestin mallin tiedostoon.

Pythonin smtplib-moduuli on pohjimmiltaan kaikki mitä tarvitset yksinkertaisten sähköpostien lähettämiseen ilman aiheriviä tai vastaavia lisätietoja. Mutta todellinen sähköpostit, et tarvitse otsikkokenttään ja paljon tietoa - ehkä jopa kuvia ja liitetiedostoja.

Tässä tulee Pythonin sähköpostipaketti. Pidä mielessä, että sähköpostiviestiä ei ole mahdollista lähettää pelkällä emailpaketilla. Tarvitset molempien emailja smtplib.

Tarkista molempien kattava virallinen dokumentaatio.

Tässä on neljä perusvaihetta sähköpostien lähettämiseen Pythonilla:

  1. Määritä SMTP-palvelin ja kirjaudu tilillesi.
  2. Luo MIMEMultipartviesti esine ja laita se asianmukaista otsikot varten From, Toja Subjectkentät.
  3. Lisää viestin teksti.
  4. Lähetä viesti käyttämällä SMTP-palvelinobjektia.

Anna minun käydä sinut läpi koko prosessin.

Oletetaan, että sinulla on seuraava yhteystiedosto mycontacts.txt:

[email protected] ~ $ cat mycontacts.txt john [email protected] katie [email protected]

Jokainen rivi edustaa yhtä kosketinta. Meillä on nimi ja sähköpostiosoite. Varastan kaiken pienillä kirjaimilla. Jätän sen ohjelmointilogiikan tehtäväksi muuntaa kentät tarvittaessa isoksi tai lauseeksi. Kaikki tämä on melko helppoa Pythonissa.

Seuraavaksi meillä on viestimallitiedosto message.txt.

[email protected] ~ $ cat message.txt Dear ${PERSON_NAME}, This is a test message. Have a great weekend! Yours Truly

Huomaa sana ” ${PERSON_NAME}”? Se on malli merkkijono Pythonissa. Mallin kielet voidaan helposti korvata muilla kielillä; Tässä esimerkissä ${PERSON_NAME}se korvataan henkilön todellisella nimellä, kuten näet pian.

Aloitetaan nyt Python-koodilla. Ensin meidän on luettava yhteystiedot mycontacts.txttiedostosta. Voisimme yhtä hyvin yleistää tämän bitin omaan toimintaansa.

Funktio get_contacts()käyttää argumenttina tiedostonimeä. Se avaa tiedoston, lukee jokaisen rivin (eli jokaisen kontaktin), jakaa sen nimeksi ja sähköpostiksi ja liittää ne sitten kahteen erilliseen luetteloon. Lopuksi nämä kaksi luetteloa palautetaan funktiosta.

Tarvitsemme myös toiminnon, jonka avulla voimme lukea mallitiedostossa (kuten message.txt) ja palauttaa Templatesen sisällöstä tehdyn objektin.

Aivan kuten edellinen funktio, tämäkin käyttää argumenttina tiedostonimeä.

Sähköpostin lähettäminen edellyttää SMTP: n (Simple Mail Transfer Protocol) käyttöä. Kuten aiemmin mainittiin, Python tarjoaa kirjastot käsittelemään tätä tehtävää.

Tuodaan yllä olevassa koodinpätkässä smtplibja luodaan sitten SMTP-ilmentymä, joka kapseloi SMTP-yhteyden. Se käyttää parametrina isäntäosoitetta ja porttinumeroa, jotka molemmat riippuvat täysin tietyn sähköpostipalveluntarjoajan SMPT-asetuksista. Esimerkiksi Outlookin tapauksessa yllä oleva rivi 4 olisi sen sijaan:

s = smtplib.SMTP(host='smtp-mail.outlook.com', port=587)

Sinun tulisi käyttää sähköpostipalvelun tarjoajan isäntäosoitetta ja portin numeroa, jotta koko asia toimisi.

MY_ADDRESSja PASSWORDedellä on kaksi muuttujaa, jotka sisältävät käyttämäsi tilin koko sähköpostiosoitteen ja salasanan.

Nyt olisi hyvä aika noutaa yhteystiedot ja viestipohjat käyttämällä edellä määriteltyjä toimintoja.

names, emails = get_contacts('mycontacts.txt') # read contacts message_template = read_template('message.txt')

Lähetetään nyt jokaiselle näistä yhteystiedoista posti erikseen.

Jokaista nameja email(koskettimista tiedosto), luot MIMEMultipart esine, perustamalla From, To, Subjectcontent-type otsikot avainsanana sanakirja, ja sitten liittämällä viestin elin MIMEMultipartobjektin pelkkänä tekstinä. Haluat ehkä lukea ohjeet saadaksesi lisätietoja muista MIME-tyypeistä, joita voit kokeilla.

Huomaa myös, että korvataan rivillä 10 yllä ${PERSON_NAME}kontaktitiedostosta puretulla varsinaisella nimellä Pythonin mallimekanismin avulla.

Tässä nimenomaisessa esimerkissä poistan MIMEMultipartobjektin ja luon sen uudelleen joka kerta, kun iteroit silmukan läpi.

Kun se on tehty, voit lähettää viestin aiemmin luomasi SMTP-objektin kätevällä send_message () -toiminnolla.

Tässä on koko koodi:

Ole hyvä! Uskon, että koodi on nyt melko selkeä.

Voit vapaasti kopioida ja säätää sitä tarvittaessa.

Virallisten Python-asiakirjojen lisäksi haluaisin mainita myös tämän resurssin, joka auttoi minua paljon.

Hyvää koodausta :)

Julkaisin tämän artikkelin alun perin täällä. Jos pidit tästä artikkelista, osu alla olevaan pieneen sydämeen. Kiitos!