Cum să trimiți e-mailuri prin Gmail în Python?

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.

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.

  13 aplicații/instrumente pentru a vă crește vânzările în magazinul Shopify

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ă.

  Cum rezistă?

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.

  Cum se utilizează funcția TRUNC în Excel

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ă 🙂