Pošaljite e-poštu pomoću Pythona

Kao vježbu učenja nedavno sam istražio Python 3 kako bih vidio kako mogu otpustiti hrpu e-mailova. Možda postoje jednostavnije metode za to u proizvodnom okruženju, ali sljedeće su mi uspjele.

Dakle, evo scenarija: imate imena i adrese e-pošte gomile kontakata. I želite poslati poruku svakom od tih kontakata, dodajući istovremeno "Dragi [ime]" na vrh poruke.

Radi jednostavnosti, podatke o kontaktima možete pohraniti u datoteku, a ne u bazu podataka. Također možete pohraniti predložak poruke koju želite poslati u datoteku.

Smtplib modul Pythona u osnovi je sve što vam treba za slanje jednostavnih e-poruka, bez ikakvog predmeta ili takvih dodatnih informacija. Ali za stvarnu e-poštu trebaju vam naslov i mnoštvo informacija - možda čak i slike i prilozi.

Tu dolazi Pythonov paket e-pošte. Imajte na umu da nije moguće poslati poruku e-pošte samo pomoću emailpaketa. Potrebna vam je kombinacija oba emaili smtplib.

Obavezno provjerite sveobuhvatnu službenu dokumentaciju za obje.

Evo četiri osnovna koraka za slanje e-pošte pomoću Pythona:

  1. Postavite SMTP poslužitelj i prijavite se na svoj račun.
  2. Stvaranje MIMEMultipartporuke objekt i učitati ga s odgovarajućim zaglavljima za From, Toi Subjectpolja.
  3. Dodajte tijelo poruke.
  4. Pošaljite poruku pomoću objekta SMTP poslužitelja.

Sad ću vas provesti kroz cijeli proces.

Recimo da imate datoteku kontakata mycontacts.txtkako slijedi:

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

Svaka linija predstavlja jedan kontakt. Imamo ime nakon kojeg slijedi adresa e-pošte. Spremam sve malim slovima. Ostavit ću programskoj logici da po potrebi pretvori sva polja u velika ili velika slova. Sve je to u Pythonu prilično jednostavno.

Dalje, imamo datoteku predloška poruke message.txt.

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

Primijetili ste riječ " ${PERSON_NAME}"? To je niz predložaka u Pythonu. Niz predložaka može se lako zamijeniti drugim nizovima; u ovom primjeru ${PERSON_NAME}će se zamijeniti stvarnim imenom osobe, kao što ćete uskoro vidjeti.

Počnimo sada s Python kodom. Prvo, moramo pročitati kontakte iz mycontacts.txtdatoteke. Mogli bismo i ovaj generacijski dio generalizirati u njegovu vlastitu funkciju.

Funkcija get_contacts()kao naziv uzima naziv datoteke. Otvorit će datoteku, pročitati svaki redak (tj. Svaki kontakt), podijeliti ga na ime i e-poštu, a zatim dodati na dva odvojena popisa. Napokon, dva su popisa vraćena iz funkcije.

Također trebamo funkciju za čitanje u datoteci predloška (poput message.txt) i vraćanje Templateobjekta izrađenog iz njezinog sadržaja.

Baš kao i prethodna funkcija, i ova kao argument uzima naziv datoteke.

Da biste poslali e-poštu, morate koristiti SMTP (Simple Mail Transfer Protocol). Kao što je ranije spomenuto, Python nudi knjižnice za obradu ovog zadatka.

U gornji isječak koda uvozite smtplibi zatim kreirate SMTP instancu koja obuhvaća SMTP vezu. Kao parametar uzima se adresa hosta i broj porta, što oboje u potpunosti ovisi o SMPT postavkama vašeg određenog davatelja usluga e-pošte. Na primjer, u slučaju programa Outlook, redak 4 gore bi umjesto toga bio:

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

Trebali biste koristiti adresu hosta i broj porta vašeg određenog davatelja usluga e-pošte da bi cijela stvar funkcionirala.

MY_ADDRESSi PASSWORDgore su dvije varijable koje sadrže punu adresu e-pošte i lozinku računa koji ćete koristiti.

Sada bi bilo dobro vrijeme da dohvatimo podatke o kontaktima i predloške poruka pomoću funkcija koje smo gore definirali.

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

Sada, za svaki od tih kontakata, pošaljite poštu zasebno.

Za svaki namei email(iz datoteke kontakata), izraÄ'ujete MIMEMultipart objekt, postavljanje From, To, Subjectsadržaj tipa zaglavlja kao ključnu riječ rječniku, a zatim pridaje tijelo poruke na MIMEMultipartobjekt kao običan tekst. Možda ćete htjeti pročitati dokumentaciju kako biste saznali više o drugim MIME vrstama s kojima možete eksperimentirati.

Također imajte na umu da u retku 10 gore zamjenjujem ${PERSON_NAME}stvarnim imenom izvučenim iz datoteke kontakata pomoću mehanizma za predloške u Pythonu.

U ovom konkretnom primjeru brišem MIMEMultipartobjekt i ponovno ga stvaram svaki put kad ponovite petlju.

Nakon što to učinite, poruku možete poslati pomoću praktične funkcije send_message () SMTP objekta koji ste ranije kreirali.

Evo cijelog koda:

Izvoli! Vjerujem da je kod sada prilično jasan.

Slobodno ga kopirajte i doradite po potrebi.

Osim službenih Python dokumenata, želio bih spomenuti i ovaj resurs koji mi je puno pomogao.

Sretno kodiranje :)

Izvorno sam objavio ovaj članak ovdje. Ako vam se svidio ovaj članak, molim vas dodirnite srce ispod. Hvala!