Wie sende ich E-Mails über Gmail in Python?
Veröffentlicht: 2021-06-06Das manuelle Versenden einer großen Menge E-Mails ist eine mühsame Aufgabe. Sie können die 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 zum Senden von E-Mails erstellen?
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 lässt die Anmeldung von Skripts nicht zu. Außerdem müssen wir die Sicherheit unseres Gmail-Kontos ändern, damit sich Skripte bei unserem Gmail-Konto anmelden können.
Das Ändern der Sicherheitsoption in unserem Gmail-Konto ist nicht gut, da andere dadurch sehr leicht auf das Konto zugreifen können. Es wird empfohlen, ein neues Gmail-Konto zu erstellen. Gehen Sie hier zu den Einstellungen 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 Gmail-Konto anmelden. Das Skript zur Verwendung der Google APIs zur Authentifizierung finden Sie hier.
Schritte zum Senden von E-Mails
Bestimmte Schritte müssen ausgeführt werden, um eine E-Mail mit der smtplib- Bibliothek zu senden. Sehen wir uns zuerst die Schritte an und dann schreiben wir das Skript.
#1. Verbindung zum SMTP-Server herstellen
Jeder Dienstanbieter hat einen anderen SMTP-Server-Domänennamen und -Port. Wir müssen den Domänennamen des SMTP-Servers und den Port des E-Mail-Anbieters verwenden, den wir im Skript verwenden werden. Der Domänenname und Port des SMTP-Servers für Gmail sind smtp.gmail.com und <em>465</em> .
Wir werden SSL- Verschlüsselung für die SMTP-Serververbindung verwenden, da diese sicherer ist als die TSL- Verschlüsselung. Wenn Sie die TSL- Verschlüsselung verwenden möchten, dann verwenden Sie den Port 587 statt 465 . Der Domänenname des SMTP-Servers unterscheidet sich je nach E-Mail-Dienstanbieter.
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 login SMTP-Objekts login . Der Code sieht wie folgt aus.
server.login(sender_email, password)#3. Mail senden
Nach der Anmeldung können wir nicht warten, bis die E-Mail gesendet 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 den Code schnell 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 senden. Schreibkurs 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 einem 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 mit HTML senden, die Bibliothek namens email.mime . Es ist eine eingebaute Bibliothek.
MIME ist ein Standard, der verwendet wird, um das Format von E-Mails zu erweitern, um Anwendungsprogramme, Videos, Bilder usw. zu unterstützen.
Es gibt zwei Klassen, die wir aus dem email.mime Modul benötigen. Sie sind MIMEText und MIMEMultipart . Sehen wir uns eine kurze Erklärung zu ihnen an.
#1. MIME-Text
Die MIMEText-Klasse wird verwendet, um unseren E-Mail-Inhalt in HTML zu schreiben. Wir erstellen eine Instanz der Klasse MIMEText, indem wir den HTML-Inhalt und die Art des Inhalts übergeben. Siehe den Beispielcode unten.

html_content = MIMEText(html_template, 'html')Einige E-Mail-Dienste unterstützen kein HTML-Rendering. Daher ist es besser, zwei Instanzen der Klasse MIMEText für Klartext und HTML zu erstellen.
#2. MIMEMehrteilig
Die MIMEMultipart - Klasse wird verwendet , um die Formatierung und das Schreiben Thema zu vereinfachen, von der Adresse, Adresse usw., werden wir den Inhalt mit Mime Klasse MIMEMultipart erstellt geben die Verwendung attach Methode.
Wir müssen sicherstellen , dass die Instanz von MIMEMultipart mit dem Argumente erstellt alternative Text oder HTML zu rendern. Lassen Sie uns eine E-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'] = 'Geekflare Celebrations' mail['From'] = self.sender_mail mail['To'] = email text_template = """ Geekflare Hi {0}, We are delighted announce that our website hits 10 Million views this month. """ html_template = """ <h1>Geekflare</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 Bcc 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 wird MIMEBase in der email.mime Klasse genannt. Es wird verwendet, um der E-Mail Anhänge hinzuzufügen.
Fügen wir der obigen E-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 = "Geekflare-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)Sofort an Massen-Mails senden
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 von anderen Empfängern erfahren).
Angenommen, Sie müssen dieselbe E-Mail gleichzeitig an 1000 Mitglieder derselben Gruppe senden. In solchen Fällen ist die Verwendung einer Schleife nicht angemessen. Wir können mehr E - Mails in dem Feld im allgemeinen Mail - compose hinzuzufügen. Wie macht man es im Python-Skript?
Wir müssen die Liste der E-Mails als eine durch Komma und Leerzeichen getrennte Zeichenfolge kombinieren. Wir können die Join- Methode string verwenden, um alle E-Mails als String zu kombinieren. Sehen Sie sich den Code an, um E-Mails als String zu kombinieren.
", ".join(emails)Ersetzen Sie das Feld An in dem obigen Skript die obige Zeichenfolge verwendet wird . Das war's, Sie haben die Mail auf einmal an Massenmails gesendet.
Fazit
Es gibt einige Bibliotheken von Drittanbietern, um E-Mails in Python zu senden. Einige davon sind Envelopes, 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-Inhalte mit Python-Skripten automatisieren. Die Struktur des E-Mail-Versands unterscheidet sich je nach Anwendungsfall. Wir haben verschiedene Szenarien für das Versenden von E-Mails gesehen. Sie können die im Tutorial besprochenen Skripte ganz einfach an Ihren Anwendungsfall anpassen. Die Referenz habe ich diesem Artikel entnommen.
Viel Spaß beim Programmieren
