Ruční odesílání velkého množství e-mailů je únavný úkol. K hromadnému odesílání e-mailů najednou můžete použít služby třetích stran.
Co takhle vytvořit si vlastní přizpůsobený skript pro odesílání e-mailů?
Není to úžasné?
Ano, je. Chystáme se napsat skript v Pythonu pro odesílání e-mailů.
Python má knihovnu nazvanou smtplib, která se používá k odesílání e-mailů. Knihovna smtplib je založena na protokolu SMTP (Simple Mail Transport Protocol). SMTP se používá k odesílání e-mailů ostatním.
Table of Contents
Nastavit Gmail
Zde budeme používat Gmail jako poskytovatele e-mailu. Google nepovoluje přihlášení skriptů. A musíme provést změnu v zabezpečení našeho účtu Gmail, která skriptům umožní přihlašování k našemu účtu Gmail.
Změna možnosti zabezpečení v našem účtu Gmail není dobrá, protože umožňuje ostatním velmi snadno přistupovat k účtu. Doporučuje se vytvořit nový účet Gmail. Přejděte do nastavení tady a zapněte nastavení Povolit méně bezpečné aplikace: ZAPNUTO.
Pokud vám nevyhovuje zapínání výše uvedeného nastavení, můžete se k účtu Gmail přihlásit pomocí rozhraní Google API. Můžete najít skript pro použití rozhraní Google API pro ověřování tady.
Kroky k odeslání pošty
Chcete-li odeslat e-mail pomocí knihovny smtplib, je třeba provést určité kroky. Nejprve se podíváme na kroky a poté napíšeme skript.
#1. Připojování k serveru SMTP
Každý poskytovatel služeb bude mít jiný název domény a port serveru SMTP. Musíme použít název domény serveru SMTP a port poskytovatele e-mailu, který budeme používat ve skriptu. Název domény serveru SMTP a port pro Gmail jsou smtp.gmail.com a 465.
Pro připojení k serveru SMTP budeme používat šifrování SSL, protože je bezpečnější než šifrování TSL. Pokud chcete používat šifrování TSL, použijte port 587 místo 465. Název domény serveru SMTP se bude lišit podle poskytovatele e-mailových služeb.
Kód pro připojení k serveru SMTP
server = smtplib.SMTP_SSL(smtp_server_domain_name, port, context=ssl_context)
#2. Přihlásit se
Po navázání spojení se serverem SMTP se můžeme přihlásit pomocí e-mailové adresy a hesla s metodou přihlášení SMTP objektu. Kód vypadá následovně.
server.login(sender_email, password)
#3. Poslat mail
Po přihlášení nemůžeme čekat s odesláním pošty. Odešlete e-mail pomocí metody sendmail. Ujistěte se, že posíláte e-mail v následujícím formátu.
Předmět: your_subject_for newline mail_content
Prostory nejsou nutné. Jsou pouze pro upřesnění ve výše uvedeném formátu. Podívejme se na ukázkový kód.
server.sendmail(sender_mail, email, f"Subject: {subject}n{content}")
#4. Přestat
Nezapomeňte ukončit SMTP c
Viděli jsme kroky k odesílání pošty pomocí Pythonu. Ale neprobírali jsme úplný kód. Pojďme rychle projít kód.
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)
Vytvořili jsme třídu s názvem Mail. A má metodu nazvanou send pro odesílání e-mailů. Psaní třídy nebo prostě ne, je na vás. Třída to dělá čitelnějším. Všechny výše popsané kroky jsme jeden po druhém implementovali do metody send.
Hurá! odeslali jste e-mail pomocí skriptu Python.
Obsah HTML
Co když chcete poslat poštu v HTML? Je to možné?
Jo, proč ne. Poštu můžeme odeslat pomocí HTML knihovny s názvem email.mime. Je to vestavěná knihovna.
The MIM je standard používaný k rozšíření formátu e-mailů o podporu aplikačních programů, videa, obrázků atd.,
Z modulu email.mime potřebujeme dvě třídy. Jsou to MIMEText a MIMEMultipart. Podívejme se na jejich stručné vysvětlení.
#1. MIMEText
Třída MIMEText se používá k psaní obsahu naší pošty v HTML. Instanci třídy MIMEText vytvoříme předáním obsahu HTML a typu obsahu. Viz ukázkový kód níže.
html_content = MIMEText(html_template, 'html')
Některé poštovní služby nepodporují vykreslování HTML. Je tedy lepší vytvořit dvě instance třídy MIMEText pro prostý text a HTML.
#2. MIMEMvícedílný
Třída MIMEMultipart se používá ke zjednodušení formátování a psaní předmětu, od adresy k adrese atd. Obsah vytvořený třídou MIMEText dáme MIMEMultipart pomocí metody attachment.
Musíme se ujistit, že instance MIMEMultipart je vytvořena s argumentem alternativou k vykreslení prostého textu nebo HTML. Odešleme e-mail s obsahem HTML.
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'] = 'etechblog.cz Celebrations' mail['From'] = self.sender_mail mail['To'] = email text_template = """ etechblog.cz Hi {0}, We are delighted announce that our website hits 10 Million views this month. """ html_template = """ <h1>etechblog.cz</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)
Můžete také přidat skrytou kopii pomocí tohoto atributu Skrytá kopie v instanci MIMEMultipart.
Přidávání příloh
Přílohy mohou být obrázky, pdf, dokumenty, listy atd. Ve třídě email.mime se nazývá MIMEBase. Slouží k přidávání příloh do pošty.
K výše uvedenému mailu přidáme přílohu.
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 = "etechblog.cz-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)
Mail to Hromadné maily najednou
Použili jsme smyčku k odeslání stejné pošty více členům. To je jeden případ (když nechcete, aby přijímače věděly o jiných přijímačích).
Předpokládejme, že musíte poslat stejnou poštu 1000 členům stejné skupiny najednou. V takových případech nebude použití smyčky vhodné. V obecném psaní pošty můžeme do pole Komu přidat více e-mailů. Jak to udělat ve skriptu Python?
Musíme zkombinovat seznam e-mailů jako řetězec oddělený čárkou a mezerou. Ke spojení všech e-mailů jako řetězce můžeme použít řetězec metody spojení. Podívejte se na kód pro spojení e-mailů jako řetězce.
", ".join(emails)
Nahraďte pole Komu ve výše uvedeném skriptu pomocí výše uvedeného řetězce. To je vše, odeslali jste poštu na hromadné maily najednou.
Závěr
Existuje několik knihoven třetích stran pro odesílání e-mailů v Pythonu. Někteří z nich jsou Obálky, Yagmail, Opevnění, atd.., Tyto knihovny nám pomáhají psát skripty s několika řádky kódu. Můžete je také prozkoumat.
Nyní můžete své e-maily automatizovat pomocí skriptů Python. Struktura odesílání e-mailů se bude lišit podle vašeho případu použití. Viděli jsme různé scénáře odesílání e-mailů. Skripty popsané v tutoriálu můžete snadno přizpůsobit svému případu použití. Z toho jsem vzal odkaz článek.
Veselé kódování 🙂