E-kirjade saatmine Pythoni abil

Õppeharjutusena uurisin hiljuti Python 3-sse, et näha, kuidas saaksin hunniku e-kirju vallandada. Tootmiskeskkonnas võib selleks olla sirgjoonelisemaid meetodeid, kuid järgmised toimisid minu jaoks hästi.

Niisiis, siin on stsenaarium: teil on hulga kontaktide nimed ja e-posti aadressid. Ja soovite saata sõnumi kõigile nendele kontaktidele, lisades sõnumi ülaossa sõna „Kallis [nimi]” .

Lihtsuse huvides võite kontaktandmed salvestada pigem faili kui andmebaasi. Saate ka faili salvestada sõnumi malli, mille soovite saata.

Pythoni moodul smtplib on põhimõtteliselt kõik, mida vajate lihtsate meilide saatmiseks ilma teemarea või sellise lisateabeta. Kuid tõeliste meilide jaoks vajate teemat ja palju teavet - võib-olla isegi pilte ja manuseid.

Siit tuleb Pythoni meilipakett. Pidage meeles, et emailainult paketti kasutades pole võimalik e-kirja saata . Teil on vaja kombinatsiooni mõlemast emailja smtplib.

Tutvuge nende mõlema põhjaliku ametliku dokumentatsiooniga.

Siin on neli peamist sammu e-kirjade saatmiseks Pythoni abil:

  1. Seadistage SMTP-server ja logige sisse oma kontole.
  2. Loo MIMEMultipartsõnum objekti ja laadida sobiva päised From, Toja Subjectväljad.
  3. Lisage oma sõnumi sisu.
  4. Saada sõnum SMTP-serveri objekti abil.

Las ma lasen teil kogu protsessi läbi viia.

Oletame, et teil on järgmine kontaktifail mycontacts.txt:

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

Iga rida tähistab ühte kontakti. Meil on nimi, millele järgneb e-posti aadress. Säilitan kõik väiketähtedega. Jätan vajaduse korral programmeerimisloogikaks kõigi väljade teisendamise suurtähtedeks või lausetähtedeks. See kõik on Pythonis üsna lihtne.

Järgmisena on meil sõnumimalli fail message.txt.

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

Kas märkate sõna “ ${PERSON_NAME}”? See on Pythoni mallistring. Mallistringid saab hõlpsasti teiste stringidega asendada; selles näites ${PERSON_NAME}asendatakse see inimese tegeliku nimega, nagu näete varsti.

Nüüd alustame Pythoni koodiga. Kõigepealt peame mycontacts.txtfailist kontaktid lugema . Sama hästi võiksime selle üldistada oma funktsiooniks.

Funktsioon get_contacts()võtab argumendiks failinime. See avab faili, loeb igat rida (st iga kontakti), jagab selle nimeks ja e-posti aadressiks ning lisab need siis kaheks eraldi loendiks. Lõpuks tagastatakse funktsioonist kaks loendit.

Samuti vajame funktsiooni mallifaili (nagu message.txt) lugemiseks ja Templateselle sisust tehtud objekti tagastamiseks .

Nii nagu eelmine funktsioon, võtab ka see oma argumendiks failinime.

E-kirja saatmiseks peate kasutama SMTP-d (Simple Mail Transfer Protocol). Nagu varem mainitud, pakub Python selle ülesandega toimetamiseks raamatukogusid.

Ülaltoodud koodijupis impordite smtplibja loote seejärel SMTP-eksemplari, mis kapseldab SMTP-ühenduse. See võtab parameetrina hostiaadressi ja pordinumbri, mis mõlemad sõltuvad täielikult teie konkreetse e-posti teenuse pakkuja SMPT-sätetest. Näiteks Outlooki korral oleks ülaltoodud rida 4 hoopis järgmine:

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

Kogu asja toimimiseks peaksite kasutama konkreetse e-posti teenuse pakkuja hosti aadressi ja pordi numbrit.

MY_ADDRESSja PASSWORDeespool on kaks muutujat, millel on kasutatava konto täielik e-posti aadress ja parool.

Nüüd oleks hea aeg saada ülaltoodud funktsioonide abil kontaktandmed ja sõnumimallid.

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

Saadame nüüd kõigi nende kontaktide puhul kirjad eraldi.

Iga nameja email(kontaktide fail), loote MIMEMultipart objekti, millega luuakse From, To, Subjectsisutüübiga päised märksõna sõnastik ja seejärel kinnitamiseks sõnumi keha MIMEMultipartobjekti lihttekstina. Võite lugeda dokumentatsiooni, et saada lisateavet teiste MIME tüüpide kohta, millega saate katsetada.

Pange tähele ka seda, et ülaltoodud real 10 asendan ${PERSON_NAME}kontaktinimefailist välja tõmmatud tegeliku nimega Pythoni mallimehhanismi abil.

Selles konkreetses näites kustutan MIMEMultipartobjekti ja loon selle uuesti iga kord, kui te tsükli kaudu kordate.

Kui see on tehtud, saate sõnumi saata, kasutades varem loodud SMTP-objekti funktsiooni käepärane send_message ().

Siin on täielik kood:

Palun! Usun, et kood on nüüd üsna selge.

Kopeerige ja näpistage seda vastavalt vajadusele.

Lisaks ametlikele Pythoni dokumentidele tahaksin mainida ka seda ressurssi, mis mind palju aitas.

Head kodeerimist :)

Algselt avaldasin selle artikli siin. Kui teile see artikkel meeldis, siis klõpsake allpool asuvat väikest südant. Aitäh!