Was benötigen Sie, um eine E-Mail mit Python zu senden? Einige grundlegende Programmier-und Webkenntnisse zusammen mit den elementaren Python-Fähigkeiten. Wir gehen davon aus, dass Sie bereits eine Web-App mit dieser Sprache erstellt haben und jetzt müssen Sie ihre Funktionalität mit Benachrichtigungen oder anderen E-Mails erweitern. Dieses Tutorial führt Sie durch die wichtigsten Schritte zum Senden von E-Mails über einen SMTP-Server:

  1. Konfigurieren eines Servers zum Testen (wissen Sie, warum dies wichtig ist?,)
    • Lokaler SMTP-Server
    • Mailtrap gefälschter SMTP-Server
  2. Verschiedene Arten von E-Mails: HTML, mit Bildern und Anhängen
  3. Senden mehrerer personalisierter E-Mails (Python ist für die E-Mail-Automatisierung von unschätzbarem Wert)
  4. Einige beliebte E-Mail-Versandoptionen wie Google Mail und Transaktions-E-Mail-Dienste

Werden mit zahlreichen Codebeispielen geliefert!

Hinweis: geschrieben und getestet auf Python 3.7.2.

Senden einer E-Mail mit SMTP

Die erste gute Nachricht über Python ist, dass es ein integriertes Modul zum Senden von E-Mails über SMTP in seiner Standardbibliothek hat., Es sind keine zusätzlichen Installationen oder Tricks erforderlich. Sie können das Modul mit der folgenden Anweisung importieren:

import smtplib

Um sicherzustellen, dass das Modul ordnungsgemäß importiert wurde und die vollständige Beschreibung seiner Klassen und Argumente abzurufen, geben Sie eine interaktive Python-Sitzung ein:

In unserem nächsten Schritt werden wir ein wenig über Server sprechen: die richtige Option auswählen und konfigurieren.,

SMTP-Server zum Testen von E-Mails in Python

Wenn Sie eine neue App erstellen oder Funktionen hinzufügen, insbesondere wenn Sie sie zum ersten Mal ausführen, müssen Sie unbedingt auf einem Testserver experimentieren. Hier ist eine kurze Liste der Gründe:

  1. Sie werden die Posteingänge Ihrer Freunde und Kunden nicht treffen. Dies ist wichtig, wenn Sie das Senden von Massen-E-Mails testen oder mit einer E-Mail-Datenbank arbeiten.
  2. Sie werden Ihren eigenen Posteingang nicht mit Test-E-Mails überfluten.
  3. Ihre Domain wird nicht wegen Spam auf die schwarze Liste gesetzt.,

Lokaler SMTP-Server

Wenn Sie lieber in der lokalen Umgebung arbeiten möchten, ist möglicherweise der lokale SMTP-Debugging-Server eine Option. Zu diesem Zweck bietet Python ein smtpd-Modul an. Es verfügt über eine DebuggingServer-Funktion, mit der Nachrichten, die Sie senden, verworfen und in stdout gedruckt werden. Es ist mit allen Betriebssystemen kompatibel.,

Setzen Sie Ihren SMTP-Server auf localhost: 1025

python -m smtpd -n -c DebuggingServer localhost:1025

Um den SMTP-Server auf Port 25 auszuführen, benötigen Sie Root-Berechtigungen:

sudo python -m smtpd -n -c DebuggingServer localhost:25

Es hilft Ihnen zu überprüfen, ob Ihr Code funktioniert, und weist auf mögliche Probleme hin, falls vorhanden. Es gibt Ihnen jedoch nicht die Möglichkeit zu überprüfen, wie Ihre HTML-E-Mail-Vorlage gerendert wird.,

Gefälschte SMTP server

Gefälschte SMTP server imitiert die arbeit von einem echten 3rd-Party-Webserver. In weiteren Beispielen in diesem Beitrag werden wir Mailtrap verwenden. Über das Testen des E-Mail-Versands hinaus können wir überprüfen, wie die E-Mail gerendert und angezeigt wird, die Rohdaten der Nachricht überprüfen und einen Spam-Bericht erstellen., Mailtrap ist sehr einfach einzurichten: Sie müssen nur die von der App generierten Anmeldeinformationen kopieren und in Ihren Code einfügen.

So sieht es in der Praxis aus:

Mailtrap macht es noch einfacher. Gehen Sie zum Abschnitt Integrationen auf der Registerkarte SMTP-Einstellungen und holen Sie sich die gebrauchsfertige Vorlage der einfachen Nachricht mit Ihren Mailtrap-Anmeldeinformationen., Es ist die einfachste Möglichkeit, Ihr Python-Skript anzuweisen, wer was an wen sendet, ist die sendmail () – Instanzmethode:

Probieren Sie Mailtrap kostenlos aus

Der Code sieht ziemlich einfach aus, oder? Schauen wir uns das genauer an und fügen einige Fehlerbehandlungen hinzu (siehe die #Erklärungen dazwischen). Um Fehler abzufangen, verwenden wir die Blöcke“ try „und“ except“. Die Liste der Ausnahmen finden Sie hier in der Dokumentation.,

Sobald Sie das gesendete Ergebnis in Shell erhalten haben, sollten Sie Ihre Nachricht in Ihrem Mailtrap-Posteingang sehen:

Senden von HTML-E-Mails

In den meisten Fällen müssen Sie Formatierungen, Links oder Bilder zu Ihren E-Mail-Benachrichtigungen hinzufügen. Wir können einfach alle diese mit dem HTML-Inhalt setzen. Zu diesem Zweck hat Python ein E-Mail-Paket.

Wir werden uns mit dem MIME-Nachrichtentyp befassen, der HTML und einfachen Text kombinieren kann. In Python wird es von der E-Mail behandelt.mime-Modul.,

Es ist besser, eine Textversion und eine HTML-Version separat zu schreiben und sie dann mit der Instanz MimeMultipart(„alternative“) zusammenzuführen. Dies bedeutet, dass eine solche Nachricht entsprechend zwei Renderoptionen hat. Falls ein HTML-Code aus irgendeinem Grund nicht erfolgreich gerendert wird, ist weiterhin eine Textversion verfügbar.

Eingabe:

Ausgabe:

Senden von E-Mails mit Anhängen in Python

Der nächste Schritt beim Senden von E-Mails mit Python ist das Anhängen von Dateien., Anhänge sind immer noch die MIME-Objekte, aber wir müssen sie mit dem base64-Modul codieren. Einige wichtige Punkte zu den Anhängen:

  1. Mit Python können Sie Textdateien, Bilder, Audiodateien und sogar Anwendungen anhängen. Sie müssen nur die entsprechende E-Mail-Klasse wie E-Mail verwenden.MIME.Audiodateien.MIMEAudio oder E-Mail.MIME.Bild.MIMEImage. Die vollständigen Informationen finden Sie in diesem Abschnitt der Python-Dokumentation. Sie können auch die von Python bereitgestellten Beispiele auf ein besseres Verständnis überprüfen.
  2. Denken Sie an die Dateigröße: Das Senden von Dateien über 20 MB ist eine schlechte Praxis.,

In Transaktions-E-Mails werden die PDF-Dateien am häufigsten verwendet: Wir erhalten normalerweise Quittungen, Tickets, Bordkarten, Auftragsbestätigungen usw. Lassen Sie uns also überprüfen, wie Sie eine Bordkarte als PDF-Datei senden.

Eingabe:

Um mehrere Dateien anzuhängen, können Sie die Nachricht aufrufen.attach () – Methode mehrmals.

So senden Sie eine E-Mail mit Bildern

Bilder, auch wenn sie Teil des Nachrichtentexts sind, sind ebenfalls Anhänge., Es gibt drei Arten von ihnen: CID-Anhänge (als MIME-Objekt eingebettet), Base64-Bilder (Inline-Einbettung) und verknüpfte Bilder. In diesem Beitrag haben wir ihre Besonderheiten, Vor-und Nachteile sowie die Kompatibilität mit den meisten E-Mail-Clients beschrieben.

Springen wir zu Beispielen.

Zum Hinzufügen eines CID-Anhangs erstellen wir eine MIME-mehrteilige Nachricht mit der Komponente MIMEImage:

Ausgabe:

Das CID-Bild wird sowohl als Teil der HTML-Nachricht als auch als Anhang angezeigt., Nachrichten mit diesem Bildtyp werden häufig als Spam angesehen: Überprüfen Sie die Registerkarte „Analyse“ in Mailtrap, um die Spam-Rate und Empfehlungen zu deren Verbesserung anzuzeigen. Viele E-Mail-Clients – insbesondere Google Mail-zeigen in den meisten Fällen keine CID-Bilder an. Lassen Sie uns also überprüfen, wie Sie ein base64-codiertes Bild einbetten.

Hier verwenden wir das base64-Modul und experimentieren mit derselben Bilddatei:

Ausgabe:

Jetzt ist das Bild in die HTML-Nachricht eingebettet und nicht als angehängte Datei verfügbar., Python hat unser JPG-Bild codiert, und wenn wir zur Registerkarte HTML-Quelle gehen, sehen wir die lange Bilddatenzeichenfolge im img src.

So senden Sie mehrere E-Mails in Python

Das Senden mehrerer E-Mails an verschiedene Empfänger und das persönliche Erstellen von E-Mails ist das Besondere an E-Mails in Python.

Um mehrere weitere Empfänger hinzuzufügen, können Sie einfach ihre Adressen durch ein Komma getrennt eingeben, CC und BCC hinzufügen. Wenn Sie jedoch mit einem Massen-E-Mail-Versand arbeiten, speichert Python Sie mit Schleifen.

Eine der Optionen besteht darin, eine Datenbank in a zu erstellen .,csv-Format (wir gehen davon aus, dass es im selben Ordner wie Ihr Python-Skript gespeichert ist).

Wir sehen unsere Namen oft in Transaktions-oder sogar Werbebeispielen. Hier ist, wie wir es mit Python machen können.

Lassen Sie uns die Liste in einer einfachen Tabelle mit nur zwei Spalten organisieren: Name und E-Mail-Adresse. Es sollte wie das folgende Beispiel aussehen:

#name,emailJohn Johnson,[email protected] Peterson,[email protected]

Der folgende Code öffnet die Datei und durchläuft zeilenweise eine Schleife über ihre Zeilen, wobei der {name} durch den Wert aus der Spalte „name“ ersetzt wird.,

Eingabe:

Nach dem Ausführen des Skripts erhalten wir folgende Antwort:

Sent to John JohnsonSent to Peter Peterson>>> 

Ausgabe

In unserem Mailtrap-Posteingang sehen wir zwei Nachrichten: eine für John Johnson und eine für Peter Peterson, die gleichzeitig geliefert werden:

Senden von E-Mails mit Python über Google Mail

Wenn Sie bereit sind, E-Mails an echte Empfänger zu senden, können Sie Ihren Produktionsserver konfigurieren. Es hängt auch von Ihren Bedürfnissen, Zielen und Vorlieben ab: Ihrem localhost oder einem externen SMTP.,

Eine der beliebtesten Optionen ist Google Mail, also schauen wir uns das genauer an.

Oft sehen wir Titel wie „So richten Sie ein Google Mail-Konto für die Entwicklung ein“. Tatsächlich bedeutet dies, dass Sie ein neues Google Mail-Konto erstellen und für einen bestimmten Zweck verwenden.

Um E-Mails über Ihr Google Mail-Konto senden zu können, müssen Sie für Ihre Anwendung Zugriff darauf gewähren. Sie können weniger sichere Apps zulassen oder das OAuth2-Autorisierungsprotokoll nutzen. Es ist viel schwieriger, aber aus Sicherheitsgründen empfohlen.,

Um einen Google Mail-Server zu verwenden, müssen Sie Folgendes wissen:

  • Der Servername = smtp.gmail.com
  • port = 465 für SSL / TLS-Verbindung (bevorzugt)
  • oder Port = 587 für STARTTLS-Verbindung.
  • Benutzername = Ihre Gmail E-Mail-Adresse
  • Passwort = Ihr Passwort ein.

Wenn Sie zur Einfachheit neigen, können Sie Yagmail verwenden, das dedizierte Google Mail / SMTP. Es macht das Senden von E-Mails wirklich einfach., Vergleichen Sie einfach die obigen Beispiele mit diesen mehreren Codezeilen:

Transaktions-E-Mail-Dienste

Google Mail ist kostenlos und weit verbreitet, hat jedoch immer noch Einschränkungen für das Senden von E-Mails. Wenn Ihre Anforderungen weit über die Google Mail-Regeln hinausgehen, wählen Sie aus einer der Optionen für Transaktionsdienste oder, wie sie auch genannt werden, E-Mail-API-Dienste.

Python wird von der überwiegenden Mehrheit der vertrauenswürdigen E-Mail-APIs unterstützt, sodass Sie nach Ihren Wünschen und Ihrem Budget auswählen können.,

Hier sind einige Anleitungen zum Senden von E-Mails mit Python durch die Liste der beliebtesten Dienste:

  • Amazon SES
  • Mailgun
  • Mandrill
  • Poststempel
  • Sendgrid
  • SocketLabs

Nächste Schritte mit E-Mails in Python

Wir haben nur grundlegende Optionen zum Senden von E-Mails mit Python gezeigt, um die logik und eine Reihe seiner Fähigkeiten. Um großartige Ergebnisse zu erzielen, empfehlen wir, die Python-Dokumentation zu überprüfen und einfach mit Ihrem eigenen Code zu experimentieren!,

Es gibt eine Reihe verschiedener Python-Frameworks und-Bibliotheken, die das Erstellen von Apps eleganter und dedizierter machen. Insbesondere können einige von ihnen dazu beitragen, Ihre Erfahrung mit dem Erstellen von E-Mail-Versandfunktionen zu verbessern:

Die beliebtesten Frameworks sind:

  1. Flask, das eine einfache Schnittstelle zum Senden von E— Mails bietet-Flask Mail.
  2. Django, was eine großartige Option zum Erstellen von HTML-Vorlagen sein kann. (Und hier ist unser tutorial zum senden von E-Mails mit Django).
  3. Zope ist praktisch für die Website-Entwicklung.,
  4. Marrow Mailer ist ein dediziertes Mail-Delivery-Framework, das verschiedene hilfreiche Konfigurationen hinzufügt.
  5. Plotly und sein Bindestrich können beim Erstellen von Diagrammen und Berichten helfen.