Das manuelle Versenden von Massen-E-Mails ist eine mühsame Aufgabe. Sie können Dienste von Drittanbietern nutzen, um die E-Mails in großen Mengen zu versenden.
Wie wäre es, wenn Sie Ihr eigenes Skript zum Versenden von E-Mails erstellen?
Ist das nicht wunderbar?
Ja, das ist es. Wir werden ein Skript in Python schreiben, um E-Mails zu versenden.
Python verfügt über eine Bibliothek namens smtplib , die für den Versand 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 werden wir Gmail als E-Mail-Anbieter verwenden. Google lässt keine Skripte zur Anmeldung zu. Und wir müssen die Sicherheitseinstellungen unseres Gmail-Kontos so ändern, dass sich Skripte bei unserem Gmail-Konto anmelden können.
Die Änderung der Sicherheitsoption in unserem Gmail-Konto ist nicht gut, da sie anderen den Zugriff auf das Konto sehr leicht ermöglicht. Es wird empfohlen, ein neues Gmail-Konto zu erstellen. Gehen Sie hier zu den Einstellungen und schalten Sie die Option Weniger sichere Apps zulassen: EIN
Wenn Sie die obige Einstellung nicht aktivieren möchten, können Sie die Google API verwenden, um sich bei Ihrem Google Mail-Konto anzumelden. Das Skript zur Verwendung der Google APIs für die Authentifizierung finden Sie hier
Schritte zum Senden von E-Mails
Um eine E-Mail mit der smtplib-Bibliothek zu versenden, müssen Sie einige Schritte ausführen. Schauen wir uns zuerst die Schritte an und schreiben dann das Skript
#1. Verbinden mit dem SMTP-Server
Jeder Dienstanbieter hat einen anderen Domänennamen und Port für den SMTP-Server. Wir müssen den SMTP-Server-Domänennamen und den Port des E-Mail-Anbieters verwenden, den wir im Skript nutzen wollen. Der SMTP-Server-Domänenname und der Port für Gmail sind smtp.gmail.com und <em>465</em>
Wir werden für die Verbindung zum SMTP-Server die SSL-Verschlüsselung verwenden, da sie sicherer ist als die TSL-Verschlüsselung . Wenn Sie die TSL-Verschlüsselung verwenden möchten, benutzen Sie den Port 587
statt 465
. Der Domänenname des SMTP-Servers ist je nach E-Mail-Anbieter unterschiedlich
Der Code zur 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 Methode login
des SMTP-Objekts mit der E-Mail-Adresse und dem Passwort anmelden. Der Code sieht wie folgt aus
server.login(absender_email, passwort)
#3. Mail senden
Nach der Anmeldung können wir mit dem Versenden der E-Mail nicht mehr warten. Senden Sie die Mail mit der Methode sendmail
. Achten Sie darauf, dass Sie die Mail im folgenden Format senden
Betreff: Ihr_Betreff_für \Neue Zeile mail_content
Leerzeichen sind nicht erforderlich. Sie dienen nur zur Verdeutlichung des obigen Formats. Sehen wir uns nun den Beispielcode an
server.sendmail(absender_mail, email, f "Betreff: {subject}\n{content}")
#4. Beenden Sie
Vergessen Sie nicht, das SMTP c zu beenden.
Wir haben die Schritte zum Versenden von E-Mails mit Python gesehen. Aber wir haben noch nicht den gesamten 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.absender_mail, self.passwort)
for email in emails:
result = service.sendmail(self.absender_mail, email, f "Betreff: {subject}\n{content}")
service.quit()
if __name__ == '__main__':
mails = input("Emails eingeben: ").split()
subject = input("Betreff eingeben: ")
content = input("Inhalt eingeben: ")
mail = Mail()
mail.send(mails, subject, content)
Wir haben eine Klasse namens E-Mail erstellt. Und sie hat eine Methode namens senden. , um die Mails zu versenden. Ob Sie die Klasse schreiben oder nicht, bleibt Ihnen überlassen. Die Klasse macht das Programm besser lesbar. Wir haben alle oben beschriebenen Schritte nacheinander in der Sendemethode implementiert
Hurra! Sie haben eine E-Mail mit einem Python-Skript verschickt
HTML-Inhalt
Was, wenn Sie die E-Mail in HTML versenden möchten? Ist das möglich?
Ja, warum nicht. Wir können die E-Mail in HTML mit der Bibliothek email.mime
versenden. Das ist eine integrierte Bibliothek
MIME ist ein Standard, mit dem das Format von E-Mails erweitert wird, um Anwendungsprogramme, Videos, Bilder usw. zu unterstützen,
Es gibt zwei Klassen, die wir aus dem email.mime
Modul benötigen. Es sind MIMEText
und MIMEMultipart
. Sehen wir uns eine kurze Erklärung zu ihnen an
#1. MIMEText
Die Klasse MIMEText 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. Sehen Sie sich den Beispielcode unten an
html_content = MIMEText(html_template, 'html')
Einige E-Mail-Dienste unterstützen die Wiedergabe von HTML nicht. Daher ist es besser, zwei Instanzen der Klasse MIMEText für einfachen Text und HTML zu erstellen
#2. MIMEMultipart
Die Klasse MIMEMultipart wird verwendet, um die Formatierung und das Schreiben von Betreff, von Adresse, an Adresse usw. zu vereinfachen. Wir werden den mit der Klasse MIMEText erstellten Inhalt mithilfe der Methode attach
an MIMEMultipart übergeben
Wir müssen dafür sorgen, dass die Instanz von MIMEMultipart mit dem Argument alternativ
zur Wiedergabe von einfachem Text oder HTML erstellt wird. Lassen Sie uns eine E-Mail mit HTML-Inhalt versenden
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.absender_mail, self.passwort)
for email in emails:
mail = MIMEMultipart('alternativ')
mail['Betreff'] = 'Geekflare-Feierlichkeiten'
mail['Von'] = self.absender_mail
mail['An'] = email
text_template = """
Geekflare
Hallo {0},
Wir freuen uns, Ihnen mitteilen zu können, dass unsere Website diesen Monat 10 Millionen Aufrufe verzeichnet hat.
"""
html_template = """
<h1>Geekflare</h1>
<p>Hallo {0},</p>
<p>Wir freuen uns, Ihnen mitteilen zu können, dass unsere Website im letzten Monat <b>10 Millionen</b> Aufrufe erreicht hat.</p>
"""
html_content = MIMEText(html_template.format(email.split("@")<x>[0]</x>), 'html')
text_content = MIMEText(text_template.format(email.split("@")<x>[0]</x>), 'einfach')
mail.attach(text_inhalt)
mail.attach(html_inhalt)
service.sendmail(self.sender_mail, email, mail.as_string())
service.quit()
if __name__ == '__main__':
mails = input("Emails eingeben: ").split()
mail = Mail()
mail.send(mails)
Sie können auch eine Blindkopie hinzufügen, indem Sie das Attribut Bcc
in der MIMEMultipart-Instanz verwenden
Hinzufügen von Anhängen
Anhänge können Bilder, PDFs, Dokumente, Blätter usw. sein. In der Klasse email.mime
es gibt eine Funktion namens MIMEBase . Sie wird verwendet, um Anhänge zur E-Mail 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-Instanz
## Text- und HTML-Vorlagen
## MIMEText-Instanzen
## Anhängen von Nachrichten an MIMEMultipart
## Anhängen eines Anhangs
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)
## Senden von Mails
service.quit()
if __name__ == '__main__':
mails = input("Enter emails: ").split()
mail = Mail()
mail.send(mails)
Mail an Massenmails auf einmal
Wir haben eine Schleife verwendet, um die gleiche Mail an mehrere Mitglieder zu senden. Das ist der eine Fall (wenn Sie nicht wollen, dass die Empfänger von anderen Empfängern wissen)
Nehmen wir an, Sie müssen dieselbe E-Mail an 1000 Mitglieder derselben Gruppe auf einmal senden. In solchen Fällen ist die Verwendung einer Schleife nicht sinnvoll. Wir können mehrere E-Mails in dem Feld Eine im allgemeinen Mail Compose einfügen. Wie macht man das in einem Python-Skript?
Wir müssen die Liste der E-Mails als String kombinieren, der durch einen Komma und ein Leerzeichen getrennt ist. Wir können die join-Methode string verwenden, um alle E-Mails zu einem String zusammenzufassen. Sehen Sie sich den Code zum Kombinieren von E-Mails als String an
", ".join(emails)
Ersetzen Sie das Feld Eine im obigen Skript durch die obige Zeichenfolge. Das war's, Sie haben die E-Mail auf einmal an Massen-E-Mails gesendet.
Fazit
Es gibt einige Bibliotheken von Drittanbietern, um E-Mails in Python zu versenden. Einige von ihnen sind Briefumschläge, Yagmail, Flanker usw. Diese Bibliotheken helfen uns, Skripte mit wenigen Zeilen Code zu schreiben. Sie können sie auch ausprobieren
Jetzt können Sie Ihre E-Mails mit Python-Skripten automatisieren. Die Struktur des E-Mail-Versand wird je nach Anwendungsfall unterschiedlich sein. Wir haben verschiedene Szenarien für den Versand von E-Mails gesehen. Sie können die im Tutorial besprochenen Skripte leicht an Ihren Anwendungsfall anpassen. Ich habe die Referenz aus diesem Artikel übernommen
Viel Spaß beim Programmieren 🙂