Wie sende ich E-Mails über Google Mail in Python?

Das manuelle Versenden einer Vielzahl von E-Mails ist eine mühsame Aufgabe. Sie können Dienste von Drittanbietern verwenden, um die E-Mails gleichzeitig in großen Mengen zu senden.

Wie wäre es, wenn Sie Ihr eigenes benutzerdefiniertes Skript erstellen, um E-Mails zu senden?

Ist es nicht wunderbar?

Ja, ist es. Wir werden ein Skript in Python schreiben, um E-Mails zu senden.

Python hat eine Bibliothek namens smtplib, die zum Senden von E-Mails verwendet wird. Die Bibliothek smtplib basiert auf dem SMTP (Simple Mail Transport Protocol). SMTP wird verwendet, um E-Mails an andere zu senden.

Gmail einrichten

Hier verwenden wir Gmail als E-Mail-Anbieter. Google erlaubt keine Anmeldung durch Skripte. Und wir müssen die Sicherheit unseres Gmail-Kontos ändern, damit sich Skripte bei unserem Gmail-Konto anmelden können.

Das Ändern der Sicherheitsoption in unserem Google Mail-Konto ist nicht gut, da es anderen ermöglicht, sehr einfach auf das Konto zuzugreifen. Es wird empfohlen, ein neues Google Mail-Konto zu erstellen. Gehen Sie zu den Einstellungen hier und aktivieren Sie die Einstellung Weniger sichere Apps zulassen: EIN.

Wenn Sie die obige Einstellung nicht aktivieren möchten, können Sie sich mit der Google API bei Ihrem Google Mail-Konto anmelden. Sie finden das Skript zur Verwendung der Google-APIs zur Authentifizierung hier.

Schritte zum Senden von E-Mails

Bestimmte Schritte müssen ausgeführt werden, um eine E-Mail mit der smtplib-Bibliothek zu senden. Lassen Sie uns zuerst die Schritte sehen und dann schreiben wir das Skript.

#1. Verbindung zum SMTP-Server herstellen

Jeder Dienstanbieter hat einen anderen Domänennamen und Port für den SMTP-Server. Wir müssen den Domänennamen des SMTP-Servers und den Port des E-Mail-Anbieters verwenden, den wir im Skript verwenden werden. Domänenname und Port des SMTP-Servers für Gmail sind smtp.gmail.com und 465.

Wir werden SSL-Verschlüsselung für die SMTP-Serververbindung verwenden, da sie sicherer ist als die TSL-Verschlüsselung. Wenn Sie die TSL-Verschlüsselung verwenden möchten, verwenden Sie den Port 587 anstelle von 465. Der Domänenname des SMTP-Servers ist je nach E-Mail-Dienstanbieter unterschiedlich.

  Die 25 besten kostenlosen Alternativen zu Adobe Premiere Pro

Der Code zum Herstellen einer Verbindung mit dem SMTP-Server

server = smtplib.SMTP_SSL(smtp_server_domain_name, port, context=ssl_context)

#2. Anmeldung

Sobald die Verbindung zum SMTP-Server hergestellt ist, können wir uns mit der E-Mail-Adresse und dem Passwort mit der Methode des Anmelde-SMTP-Objekts anmelden. Der Code sieht wie folgt aus.

server.login(sender_email, password)

#3. E-Mail senden

Nach der Anmeldung können wir nicht warten, bis die E-Mail versendet wird. Senden Sie die E-Mail mit der Methode sendmail. Stellen Sie sicher, dass Sie die E-Mail im folgenden Format senden.

Betreff: your_subject_for newline mail_content

Leerzeichen sind nicht erforderlich. Sie dienen nur der Verdeutlichung im obigen Format. Sehen wir uns den Beispielcode an.

server.sendmail(sender_mail, email, f"Subject: {subject}n{content}")

#4. Aufhören

Vergessen Sie nicht, das SMTP zu beenden. c

Wir haben die Schritte zum Senden von E-Mails mit Python gesehen. Wir haben jedoch nicht den vollständigen Code besprochen. Lassen Sie uns schnell den Code durchgehen.

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)

Wir haben eine Klasse namens Mail erstellt. Und es hat eine Methode namens send, um die Mails zu versenden. Schreibunterricht oder einfach nicht, liegt bei Ihnen. Die Klasse macht es lesbarer. Wir haben alle oben besprochenen Schritte nacheinander in der send-Methode implementiert.

Hurra! Sie haben eine E-Mail mit Python-Skript gesendet.

HTML-Inhalt

Was ist, wenn Sie die E-Mail in HTML senden möchten? Ist es möglich?

Ja, warum nicht. Wir können die E-Mail mithilfe der HTML-Bibliothek namens email.mime senden. Es ist eine eingebaute Bibliothek.

Das MIME ist ein Standard, der verwendet wird, um das Format von E-Mails zu erweitern, um Anwendungsprogramme, Videos, Bilder usw. zu unterstützen,

  Wird die EU Apple dazu bringen, Blitze auf dem iPhone loszuwerden?

Es gibt zwei Klassen, die wir aus dem email.mime-Modul benötigen. Sie sind MIMEText und MIMEMultipart. Lassen Sie uns eine kurze Erklärung über sie sehen.

#1. MIMEText

Die MIMEText-Klasse wird verwendet, um unseren Mail-Inhalt in HTML zu schreiben. Wir erstellen eine Instanz der Klasse MIMEText, indem wir HTML-Inhalt und den Typ des Inhalts übergeben. Siehe Beispielcode unten.

html_content = MIMEText(html_template, 'html')

Einige E-Mail-Dienste unterstützen kein HTML-Rendering. Es ist also besser, zwei Instanzen der Klasse MIMEText für einfachen Text und HTML zu erstellen.

#2. MIMEMultipart

Die MIMEMultipart-Klasse wird verwendet, um die Formatierung und das Schreiben von Betreff zu vereinfachen, von Adresse zu Adresse usw. Wir geben den mit der MIMEText-Klasse erstellten Inhalt an MIMEMultipart unter Verwendung der Attach-Methode.

Wir müssen sicherstellen, dass die Instanz von MIMEMultipart mit dem Argument alternative zum Rendern von reinem Text oder HTML erstellt wird. Lassen Sie uns eine Mail mit HTML-Inhalt senden.

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'] = 'wdzwdz Celebrations'
            mail['From'] = self.sender_mail
            mail['To'] = email

            text_template = """
            wdzwdz

            Hi {0},
            We are delighted announce that our website hits 10 Million views this month.
            """
            html_template = """
            <h1>wdzwdz</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)

Sie können auch eine Blindkopie hinzufügen, indem Sie dieses Attribut Bcc in der MIMEMultipart-Instanz verwenden.

Anhänge hinzufügen

Anhänge können Bilder, PDFs, Dokumente, Blätter usw. sein. Es heißt MIMEBase in der Klasse email.mime. Es wird verwendet, um der E-Mail Anhänge hinzuzufügen.

Fügen wir der obigen Mail einen Anhang hinzu.

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 = "wdzwdz-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-Bulk-Mails auf einmal

Wir haben eine Schleife verwendet, um dieselbe E-Mail an mehrere Mitglieder zu senden. Das ist ein Fall (wenn Sie nicht möchten, dass die Empfänger etwas über andere Empfänger wissen).

  7 Amazon Price Tracker zum richtigen Zeitpunkt kaufen

Angenommen, Sie müssen dieselbe Mail gleichzeitig an 1000 Mitglieder derselben Gruppe senden. In solchen Fällen ist die Verwendung einer Schleife nicht angemessen. Wir können mehrere E-Mails im Feld „An“ beim allgemeinen Verfassen von E-Mails hinzufügen. Wie macht man das im Python-Skript?

Wir müssen die Liste der E-Mails als Zeichenfolge kombinieren, die durch ein Komma und ein Leerzeichen getrennt ist. Wir können die Join-Methode string verwenden, um alle E-Mails als String zusammenzufassen. Sehen Sie sich den Code an, um E-Mails als Zeichenfolge zu kombinieren.

", ".join(emails)

Ersetzen Sie das Feld „An“ im obigen Skript durch die obige Zeichenfolge. Das war’s, Sie haben die Mail auf einmal an Massen-Mails verschickt.

Fazit

Es gibt einige Bibliotheken von Drittanbietern, um E-Mails in Python zu senden. Einige von ihnen sind Umschläge, Yagmail, Flanker, etc.. Diese Bibliotheken helfen uns, Skripte mit wenigen Codezeilen zu schreiben. Sie können sie auch erkunden.

Jetzt können Sie Ihre E-Mail-Sachen mithilfe von Python-Skripten automatisieren. Die Struktur des E-Mail-Versands ist je nach Anwendungsfall unterschiedlich. Wir haben verschiedene Szenarien zum Versenden von E-Mails gesehen. Sie können die im Tutorial besprochenen Skripte einfach an Ihren Anwendungsfall anpassen. Den Hinweis habe ich daraus entnommen Artikel.

Viel Spaß beim Programmieren 🙂