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.
Inhaltsverzeichnis
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.
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,
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).
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 🙂