
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 email
csomag 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:
- Állítsa be az SMTP-kiszolgálót, és jelentkezzen be a fiókjába.
- Hozza létre az
MIMEMultipart
üzenetet tárgy és töltse be a megfelelő fejlécet azFrom
,To
ésSubject
területeken. - Adja hozzá az üzenet törzsét.
- 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.txt
az 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.txt
fá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 Template
a 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 PASSWORD
fenti 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
, Subject
content-type fejlécet, mint a kulcsszó szótárban, majd rögzíti az üzenet szövegét a MIMEMultipart
tá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 MIMEMultipart
objektumot, é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!