E-mailek küldése a Python használatával

Tanulási gyakorlatként nemrég belemélyedtem a Python 3-ba, hogy lássam, hogyan tudok lőni egy rakás e-mailt. Lehet, hogy egyszerűbb módszerek vannak erre a gyártási környezetben, de az alábbiak jól működtek nekem.

Tehát, íme egy forgatókönyv: Megvan egy csomó név neve és e-mail címe. És üzenetet szeretne küldeni ezeknek a kapcsolattartóknak, miközben hozzáad egy „Kedves [név]” -t az üzenet tetejére.

Az egyszerűség kedvéért az elérhetőségeket egy fájlban, nem pedig adatbázisban tárolhatja. Az elküldeni kívánt üzenet sablonját fájlban is tárolhatja.

A Python smtplib modulja alapvetően minden, amire szükséged van egyszerű e-mailek küldéséhez, tárgy és egyéb információk nélkül. A valódi e-mailekhez azonban szükséged van egy tárgysorra és sok információra - talán még képekre és mellékletekre is.

Itt jön be a Python e-mail csomagja. Ne feledje, hogy csak a emailcsomag használatával nem lehet e-mailt küldeni . Szüksége van mindkettő emailés smtplib.

Mindkettőhöz olvassa el az átfogó hivatalos dokumentációt.

Íme négy alapvető lépés az e-mailek küldéséhez a Python használatával:

  1. Állítsa be az SMTP-kiszolgálót, és jelentkezzen be a fiókjába.
  2. Hozza létre az MIMEMultipartüzenetet tárgy és töltse be a megfelelő fejlécet az From, Toés Subjectterületeken.
  3. Adja hozzá az üzenet törzsét.
  4. Küldje el az üzenetet az SMTP szerver objektummal.

Most hadd vezessem végig az egész folyamatot.

Tegyük fel, hogy van egy névjegyfájlja mycontacts.txtaz alábbiak szerint:

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

Minden sor egyetlen érintkezőt jelent. Megvan a név, amelyet az e-mail cím követ. Mindent kisbetűvel tárolok. A programozási logikára bízom, hogy szükség esetén bármely mezőt nagybetűvé vagy mondatbetűvé alakítson. Mindez nagyon egyszerű a Pythonban.

Ezután megvan az üzenet sablonfájlja message.txt.

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

Észreveszi a „ ${PERSON_NAME}” szót ? Ez egy sablon karakterlánc a Pythonban. A sablon húrjai könnyen helyettesíthetők más húrokkal; ebben a példában ${PERSON_NAME}a személy tényleges nevére cseréljük, amint hamarosan láthatja.

Most kezdjük a Python kóddal. Először fel kell olvasnunk a névjegyeket a mycontacts.txtfájlból. Ezt a kicsit is általánosíthatnánk a saját funkciójába.

A függvény get_contacts()argumentumként egy fájlnevet vesz fel. Megnyitja a fájlt, elolvassa az egyes sorokat (azaz az összes kapcsolatot), felosztja névre és e-mail címre, majd két külön listára fűzi őket. Végül a két lista visszatér a függvényből.

Szükségünk van egy funkcióra egy sablonfájl (például message.txt) beolvasásához és Templatea tartalmából készített objektum visszaküldéséhez is .

Csakúgy, mint az előző függvény, ez is egy fájlnevet vesz érvként.

Az e-mail küldéséhez ki kell használnia az SMTP-t (Simple Mail Transfer Protocol). Mint korábban említettük, a Python könyvtárakat biztosít a feladat kezelésére.

A fenti kódrészletben importálja smtplib, majd létrehoz egy SMTP-példányt, amely egy SMTP-kapcsolatot foglal magában. Paraméterként a gazdagép címét és a portszámot veszi figyelembe, amelyek mind az adott e-mail szolgáltató SMPT-beállításaitól függenek. Például az Outlook esetében a fenti 4. sor helyette a következő lenne:

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

Az egész működéséhez használja az adott e-mail szolgáltató gazdagép címét és portszámát.

MY_ADDRESSés a PASSWORDfenti két változó, amelyek a használni kívánt fiók teljes e-mail címét és jelszavát tartalmazzák.

Most jó alkalom lenne a kapcsolattartási adatok és az üzenetsablonok beolvasására a fent meghatározott funkciók segítségével.

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

Most mindegyik kapcsolattartó esetében küldjük el külön a levelet.

Minden nameés email(a kapcsolattartó fájl), akkor létre MIMEMultipart objektum létrehozásának From, To, Subjectcontent-type fejlécet, mint a kulcsszó szótárban, majd rögzíti az üzenet szövegét a MIMEMultiparttárgy sima. Érdemes elolvasnia a dokumentációt, hogy többet megtudjon más MIME-típusokról, amelyekkel kísérletezhet.

Vegye figyelembe azt is, hogy a fenti 10. sorban kicserélem ${PERSON_NAME}a névjegyzékből kinyert tényleges névre a Python sablonmechanizmusával.

Ebben a konkrét példában törlöm az MIMEMultipartobjektumot, és újra létrehozom minden alkalommal, amikor a cikluson keresztül iterál.

Miután ez megtörtént, az üzenetet elküldheti a korábban létrehozott SMTP objektum handy send_message () függvényével.

Itt van a teljes kód:

Nesze! Úgy gondolom, hogy a kód ma már elég egyértelmű.

Szükség szerint másolja és módosítsa.

A hivatalos Python-dokumentumokon kívül szeretném megemlíteni ezt az erőforrást is, amely sokat segített nekem.

Boldog kódolás :)

E cikket eredetileg itt tettem közzé. Ha tetszett ez a cikk, kérjük, nyomja meg az alábbi kis szívet. Köszönöm!