Trimiterea manuală a unui volum mare de e-mailuri este o sarcină plictisitoare. Puteți utiliza servicii terță parte pentru a trimite e-mailurile în vrac la un moment dat.
Ce zici să-ți creezi propriul script personalizat pentru a trimite e-mailuri?
Nu este minunat?
Da este. Vom scrie un script în Python pentru a trimite e-mailuri.
Python are o bibliotecă numită smtplib care este folosită pentru a trimite e-mailuri. Biblioteca smtplib se bazează pe SMTP (Simple Mail Transport Protocol). SMTP este folosit pentru a trimite e-mailuri altora.
Cuprins
Configurați Gmail
Aici, vom folosi Gmail ca furnizor de e-mail. Google nu permite conectarea scripturilor. Și trebuie să facem o schimbare în securitatea contului nostru Gmail, care să permită scripturilor să se conecteze la contul nostru Gmail.
Schimbarea opțiunii de securitate din contul nostru Gmail nu este bună, deoarece permite altora să acceseze contul foarte ușor. Este recomandat să creați un nou cont Gmail. Accesați setările Aici și activați setarea Permite aplicații mai puțin sigure: ACTIVAT.
Dacă nu vă simțiți confortabil să activați setarea de mai sus, puteți utiliza Google API pentru a vă conecta la contul dvs. Gmail. Puteți găsi scriptul pentru a utiliza API-urile Google pentru autentificare Aici.
Pași pentru a trimite e-mail
Trebuie să faceți anumiți pași pentru a trimite un e-mail utilizând biblioteca smtplib. Să vedem mai întâi pașii și apoi vom scrie scriptul.
#1. Conectarea la serverul SMTP
Fiecare furnizor de servicii va avea un nume de domeniu și un port diferit de server SMTP. Trebuie să folosim numele de domeniu al serverului SMTP și portul furnizorului de e-mail pe care le vom folosi în script. Numele de domeniu al serverului SMTP și portul pentru Gmail sunt smtp.gmail.com și 465.
Vom folosi criptarea SSL pentru conexiunea la serverul SMTP, deoarece este mai sigură decât criptarea TSL. Dacă doriți să utilizați criptarea TSL, atunci utilizați portul 587 în loc de 465. Numele de domeniu al serverului SMTP va fi diferit în funcție de furnizorul de servicii de e-mail.
Codul de conectare la serverul SMTP
server = smtplib.SMTP_SSL(smtp_server_domain_name, port, context=ssl_context)
#2. Autentificare
Odată stabilită conexiunea la serverul SMTP, ne putem autentifica folosind adresa de e-mail și parola cu metoda obiectului SMTP de conectare. Codul arată după cum urmează.
server.login(sender_email, password)
#3. Trimite e-mail
După autentificare, nu avem cum să așteptăm să trimitem e-mailul. Trimiteți e-mailul folosind metoda sendmail. Asigurați-vă că trimiteți e-mailul în următorul format.
Subiect: your_subject_for newline mail_content
Spațiile nu sunt necesare. Sunt doar pentru clarificare în formatul de mai sus. Să vedem exemplul de cod.
server.sendmail(sender_mail, email, f"Subject: {subject}n{content}")
#4. Părăsi
Nu uitați să părăsiți SMTP c
Am văzut pașii pentru a trimite e-mail folosind Python. Dar, nu am discutat despre codul complet. Să parcurgem rapid codul.
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)
Am creat o clasă numită Mail. Și are o metodă numită send pentru a trimite e-mailurile. Cursul de scris sau pur și simplu nu depinde de tine. Clasa o face mai lizibilă. Am implementat toți pașii discutați mai sus unul câte unul în metoda de trimitere.
Ura! ați trimis un e-mail folosind scriptul Python.
Conținut HTML
Ce se întâmplă dacă doriți să trimiteți e-mailul în HTML? Este posibil?
Da, de ce nu. Putem trimite e-mailul folosind HTML biblioteca numită email.mime. Este o bibliotecă încorporată.
The MIMA este un standard folosit pentru a extinde formatul de e-mailuri pentru a susține programe de aplicații, videoclipuri, imagini etc.,
Există două clase de care avem nevoie din modulul email.mime. Acestea sunt MIMEText și MIMEMultipart. Să vedem o scurtă explicație despre ele.
#1. MIMEText
Clasa MIMEText este folosită pentru a scrie conținutul nostru de e-mail în HTML. Vom crea o instanță a clasei MIMEText pasând conținut HTML și tipul de conținut. Vedeți exemplul de cod de mai jos.
html_content = MIMEText(html_template, 'html')
Unele servicii de e-mail nu acceptă redarea HTML. Deci, este mai bine să creați două instanțe ale clasei MIMEText pentru text simplu și HTML.
#2. MIMEMultipart
Clasa MIMEMultipart este folosită pentru a simplifica formatarea și scrierea subiectului, de la adresă, la adresă etc. Vom da conținutul creat cu clasa MIMEText către MIMEMultipart folosind metoda attach.
Trebuie să ne asigurăm că instanța MIMEMultipart este creată cu argumentul alternativ pentru a reda text simplu sau HTML. Să trimitem un e-mail cu conținut 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'] = 'tipstrick.ro Celebrations' mail['From'] = self.sender_mail mail['To'] = email text_template = """ tipstrick.ro Hi {0}, We are delighted announce that our website hits 10 Million views this month. """ html_template = """ <h1>tipstrick.ro</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)
De asemenea, puteți adăuga o copie carbon oarbă folosind acel atribut Bcc în instanța MIMEMultipart.
Adăugarea de atașamente
Atașamentele pot fi imagini, pdf-uri, documente, foi etc. Se numește MIMEBase în clasa email.mime. Este folosit pentru a adăuga atașamente la e-mail.
Să adăugăm un atașament la e-mailul de mai sus.
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 = "tipstrick.ro-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)
Trimiteți prin e-mailuri în vrac o dată
Am folosit o buclă pentru a trimite același e-mail către mai mulți membri. Acesta este un caz (când nu doriți ca receptorii să știe despre alți receptori).
Să presupunem că trebuie să trimiteți același e-mail la 1000 de membri simultan ai aceluiași grup. În astfel de cazuri, utilizarea unei bucle nu va fi adecvată. Putem adăuga mai multe e-mailuri în câmpul Către în compunerea e-mailului general. Cum se face în scriptul Python?
Trebuie să combinăm lista de e-mailuri ca un șir separat prin virgulă și spațiu. Putem folosi șirul metodei join pentru a combina toate e-mailurile ca șir. Vedeți codul pentru a combina e-mailurile ca șir.
", ".join(emails)
Înlocuiți câmpul Către în scriptul de mai sus folosind șirul de mai sus. Gata, ați trimis e-mailul către e-mailuri în bloc deodată.
Concluzie
Există câteva biblioteci terță parte pentru a trimite e-mailuri în Python. Unii dintre ei sunt Plicuri, Yagmail, Flanker, etc., Aceste biblioteci ne ajută să scriem scripturi cu câteva linii de cod. Le poți explora și pe ele.
Acum, vă puteți automatiza chestiile de e-mail folosind scripturi Python. Structura trimiterii de e-mailuri va fi diferită în funcție de cazul dvs. de utilizare. Am văzut diferite scenarii de trimitere de e-mailuri. Puteți personaliza cu ușurință scripturile discutate în tutorial în funcție de cazul dvs. de utilizare. Am luat referința din asta articol.
Codare fericită 🙂