Az e-mailek nagy részének kézi küldése unalmas feladat. Harmadik fél szolgáltatásaival egyszerre tömegesen küldheti el az e-maileket.
Mit szólnál, ha létrehoznál egy saját, testreszabott szkriptet az e-mailek küldéséhez?
Hát nem csodálatos?
Igen, ez az. Szkriptet fogunk írni Pythonban az e-mailek küldéséhez.
A Python rendelkezik egy smtplib nevű könyvtárral, amelyet e-mailek küldésére használnak. Az smtplib könyvtár az SMTP-n (Simple Mail Transport Protocol) alapul. Az SMTP-t arra használják, hogy e-maileket küldjenek másoknak.
Tartalomjegyzék
A Gmail beállítása
Itt a Gmailt fogjuk használni e-mail szolgáltatóként. A Google nem engedélyezi a bejelentkezést a szkriptek számára. Változást kell végrehajtanunk Gmail-fiókunk biztonságában, amely lehetővé teszi a szkriptek számára, hogy bejelentkezzenek Gmail-fiókunkba.
A biztonsági beállítás módosítása a Gmail fiókunkban nem jó, mert így mások is nagyon könnyen hozzáférhetnek a fiókhoz. Javasoljuk, hogy hozzon létre egy új Gmail fiókot. Menjen a beállításokhoz itt és kapcsolja be a Kevésbé biztonságos alkalmazások engedélyezése: BE beállítást.
Ha nem elégedett a fenti beállítás bekapcsolásával, a Google API segítségével bejelentkezhet Gmail-fiókjába. Megtalálhatja a szkriptet a Google API-k hitelesítéshez való használatához itt.
A levelek küldésének lépései
Bizonyos lépéseket meg kell tenni az smtplib könyvtár használatával történő levélküldéshez. Először lássuk a lépéseket, majd írjuk meg a forgatókönyvet.
#1. Csatlakozás az SMTP szerverhez
Minden szolgáltatónak más az SMTP szerver tartományneve és portja. Használnunk kell az SMTP-kiszolgáló tartománynevét és az e-mail szolgáltató portját, amelyet használni fogunk a szkriptben. A Gmail SMTP-szerverének tartományneve és portja: smtp.gmail.com és 465.
SSL titkosítást fogunk használni az SMTP szerver kapcsolathoz, mivel ez biztonságosabb, mint a TSL titkosítás. Ha TSL-titkosítást szeretne használni, használja az 587-es portot a 465-ös helyett. Az SMTP-kiszolgáló tartományneve az e-mail szolgáltatótól függően eltérő lesz.
Az SMTP szerverhez való csatlakozás kódja
server = smtplib.SMTP_SSL(smtp_server_domain_name, port, context=ssl_context)
#2. Belépés
Miután létrejött a kapcsolat az SMTP szerverrel, az e-mail címmel és jelszóval bejelentkezhetünk a bejelentkezési SMTP objektum metódusával. A kód a következőképpen néz ki.
server.login(sender_email, password)
#3. Levél küldés
Bejelentkezés után már nem tudjuk megvárni a levél elküldését. Küldje el a levelet a sendmail módszerrel. Ügyeljen arra, hogy a levelet a következő formátumban küldje el.
Tárgy: az Ön_tárgya az újsoros mail_tartalomhoz
A szóközök nem szükségesek. Csak a pontosítás kedvéért a fenti formátumban. Lássuk a mintakódot.
server.sendmail(sender_mail, email, f"Subject: {subject}n{content}")
#4. Kilépés
Ne felejtsen el kilépni az SMTP c
Láttuk a Python használatával történő levelek küldésének lépéseit. De még nem beszéltük meg a teljes kódot. Menjünk gyorsan a kódon.
import smtplib, ssl class Mail: def __init__(self): self.port = 465 self.smtp_server_domain_name = "smtp.gmail.com" self.sender_mail = "GMAIL_ADDRESS" self.password = "SECURE_PASSWORD" def send(self, emails, subject, content): ssl_context = ssl.create_default_context() service = smtplib.SMTP_SSL(self.smtp_server_domain_name, self.port, context=ssl_context) service.login(self.sender_mail, self.password) for email in emails: result = service.sendmail(self.sender_mail, email, f"Subject: {subject}n{content}") service.quit() if __name__ == '__main__': mails = input("Enter emails: ").split() subject = input("Enter subject: ") content = input("Enter content: ") mail = Mail() mail.send(mails, subject, content)
Létrehoztunk egy Mail nevű osztályt. És van egy send nevű módszere a levelek elküldésére. Rajtad múlik, hogy megírod-e az órát, vagy nem. Az osztály olvashatóbbá teszi. A fentiekben tárgyalt lépéseket egyenként megvalósítottuk a küldési módban.
Hurrá! Python szkripttel küldött levelet.
HTML tartalom
Mi a teendő, ha HTML-ben szeretnéd elküldeni a levelet? Lehetséges?
Igen, miért ne. A leveleket az email.mime nevű könyvtár HTML használatával küldhetjük el. Ez egy beépített könyvtár.
Az PANTOMIM egy szabvány, amelyet az e-mailek formátumának kiterjesztésére használnak, hogy támogassák az alkalmazásokat, videókat, képeket stb.,
Két osztályra van szükségünk az email.mime modulból. Ezek a MIMEText és a MIMEMultipart. Lássunk egy rövid magyarázatot róluk.
#1. MIMEText
A MIMEText osztályt arra használjuk, hogy leveleinket HTML-ben írjuk. Létrehozzuk a MIMEText osztály példányát a HTML tartalom és a tartalom típusának átadásával. Lásd az alábbi mintakódot.
html_content = MIMEText(html_template, 'html')
Egyes levelezőszolgáltatások nem támogatják a HTML-megjelenítést. Tehát jobb, ha két példányt hoz létre a MIMEText osztályból egyszerű szöveghez és HTML-hez.
#2. MIMEMmultipart
A MIMEMultipart osztály a formázás és az írás tárgyának egyszerűsítésére szolgál, címtől címig stb. A MIMEText osztállyal készített tartalmat a MIMEMultipartnak adjuk át csatolási metódussal.
Meg kell győződnünk arról, hogy a MIMEMultipart példánya a sima szöveg vagy HTML megjelenítés alternatívájával jön létre. Küldjünk e-mailt HTML tartalommal.
import smtplib, ssl from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart class Mail: def __init__(self): ... def send(self, emails): ssl_context = ssl.create_default_context() service = smtplib.SMTP_SSL(self.smtp_server_domain_name, self.port, context=ssl_context) service.login(self.sender_mail, self.password) for email in emails: mail = MIMEMultipart('alternative') mail['Subject'] = 'etoppc.com Celebrations' mail['From'] = self.sender_mail mail['To'] = email text_template = """ etoppc.com Hi {0}, We are delighted announce that our website hits 10 Million views this month. """ html_template = """ <h1>etoppc.com</h1> <p>Hi {0},</p> <p>We are delighted announce that our website hits <b>10 Million</b> views last month.</p> """ html_content = MIMEText(html_template.format(email.split("@")[0]), 'html') text_content = MIMEText(text_template.format(email.split("@")[0]), 'plain') mail.attach(text_content) mail.attach(html_content) service.sendmail(self.sender_mail, email, mail.as_string()) service.quit() if __name__ == '__main__': mails = input("Enter emails: ").split() mail = Mail() mail.send(mails)
A titkos másolatot a Bcc attribútum használatával is hozzáadhatja a MIMEMultipart példányban.
Mellékletek hozzáadása
A mellékletek lehetnek képek, pdf-ek, dokumentumok, lapok stb. Az email.mime osztályban MIMEBase néven szerepel. A levél mellékleteinek hozzáadására szolgál.
Adjunk hozzá egy mellékletet a fenti levélhez.
import smtplib, ssl from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase from email import encoders from pathlib import Path class Mail: def __init__(self): ... def send(self, emails): ## login... for email in emails: ## MIMEMultipart instance ## text and html templates ## MIMEText instances ## attaching messages to MIMEMultipart ## attaching an attachment file_path = "etoppc.com-logo.png" mimeBase = MIMEBase("application", "octet-stream") with open(file_path, "rb") as file: mimeBase.set_payload(file.read()) encoders.encode_base64(mimeBase) mimeBase.add_header("Content-Disposition", f"attachment; filename={Path(file_path).name}") mail.attach(mimeBase) ## sending mail service.quit() if __name__ == '__main__': mails = input("Enter emails: ").split() mail = Mail() mail.send(mails)
Postázás tömeges levelekre egyszerre
Egy hurkot használtunk arra, hogy ugyanazt a levelet több tagnak is elküldjük. Ez egy eset (amikor nem akarja, hogy a vevők tudjanak más vevőkészülékekről).
Tételezzük fel, hogy ugyanazt a levelet kell elküldened ugyanannak a csoportnak egyszerre 1000 tagjának. Ilyen esetekben a hurok használata nem megfelelő. Több e-mailt is felvehetünk a Címzett mezőbe az általános levélírás során. Hogyan kell csinálni Python szkriptben?
Az e-mailek listáját vesszővel és szóközzel elválasztott karakterláncként kell kombinálnunk. Az összekapcsolási metódus karakterláncával az összes e-mailt karakterláncként kombinálhatjuk. Tekintse meg a kódot az e-mailek karakterláncként való kombinálásához.
", ".join(emails)
Cserélje ki a Címzett mezőt a fenti szkriptben a fenti karakterlánc használatával. Ez az, Ön egyszerre küldte el a leveleket tömeges e-mailekre.
Következtetés
Vannak harmadik féltől származó könyvtárak e-mailek küldésére Pythonban. Némelyikük igen Borítékok, Yagmail, Oldalbástya, stb., Ezek a könyvtárak segítenek nekünk néhány soros kóddal szkripteket írni. Te is felfedezheted őket.
Most már automatizálhatja e-mailjeit Python-szkriptek segítségével. Az e-mailek küldésének szerkezete az Ön használati esetétől függően eltérő lesz. Különféle forgatókönyveket láttunk az e-mailek küldésére. Könnyedén testreszabhatja az oktatóanyagban tárgyalt szkripteket az Ön használati esetéhez. Ebből vettem a hivatkozást cikk.
Boldog kódolást 🙂