E-Mails mit Python senden

Als Lernübung habe ich mich kürzlich mit Python 3 befasst, um zu sehen, wie ich eine Reihe von E-Mails abfeuern kann. Es mag einfachere Methoden geben, dies in einer Produktionsumgebung zu tun, aber das Folgende hat für mich gut funktioniert.

Hier ist ein Szenario: Sie haben die Namen und E-Mail-Adressen einer Reihe von Kontakten. Und Sie möchten eine Nachricht an jeden dieser Kontakte senden, während Sie oben in der Nachricht ein "Lieber [Name]" hinzufügen .

Der Einfachheit halber können Sie die Kontaktdaten in einer Datei anstatt in einer Datenbank speichern. Sie können die Vorlage der Nachricht, die Sie senden möchten, auch in einer Datei speichern.

Das smtplib-Modul von Python ist im Grunde alles, was Sie zum Senden einfacher E-Mails benötigen, ohne Betreffzeile oder zusätzliche Informationen. Für echte E-Mails benötigen Sie jedoch eine Betreffzeile und viele Informationen - möglicherweise sogar Bilder und Anhänge.

Hier kommt das E-Mail-Paket von Python ins Spiel. Beachten Sie, dass es nicht möglich ist, eine E-Mail-Nachricht nur mit dem emailPaket zu senden . Sie benötigen eine Kombination aus beiden emailund smtplib.

Lesen Sie unbedingt die umfassende offizielle Dokumentation zu beiden.

Hier sind vier grundlegende Schritte zum Senden von E-Mails mit Python:

  1. Richten Sie den SMTP-Server ein und melden Sie sich bei Ihrem Konto an.
  2. Erstellen Sie die MIMEMultipartNachricht Objekt und laden Sie es mit entsprechenden Header für From, Tound SubjectFelder.
  3. Fügen Sie Ihren Nachrichtentext hinzu.
  4. Senden Sie die Nachricht mit dem SMTP-Serverobjekt.

Lassen Sie sich jetzt von mir durch den gesamten Prozess führen.

Angenommen, Sie haben eine Kontaktdatei mycontacts.txtwie folgt:

[email protected] ~ $ cat mycontacts.txt john [email protected] katie [email protected]

Jede Zeile repräsentiert einen einzelnen Kontakt. Wir haben den Namen gefolgt von der E-Mail-Adresse. Ich speichere alles in Kleinbuchstaben. Ich überlasse es der Programmierlogik, Felder bei Bedarf in Groß- oder Satzbuchstaben umzuwandeln. All das ist in Python ziemlich einfach.

Als nächstes haben wir die Nachrichtenvorlagendatei message.txt.

[email protected] ~ $ cat message.txt Dear ${PERSON_NAME}, This is a test message. Have a great weekend! Yours Truly

Beachten Sie das Wort " ${PERSON_NAME}"? Das ist eine Vorlagenzeichenfolge in Python. Vorlagenzeichenfolgen können leicht durch andere Zeichenfolgen ersetzt werden. In diesem Beispiel ${PERSON_NAME}wird es durch den tatsächlichen Namen der Person ersetzt, wie Sie in Kürze sehen werden.

Beginnen wir nun mit dem Python-Code. Zuerst müssen wir die Kontakte aus der mycontacts.txtDatei lesen . Wir könnten dieses Bit genauso gut in seine eigene Funktion verallgemeinern.

Die Funktion verwendet get_contacts()einen Dateinamen als Argument. Es öffnet die Datei, liest jede Zeile (dh jeden Kontakt), teilt sie in Name und E-Mail auf und hängt sie dann in zwei separate Listen an. Schließlich werden die beiden Listen von der Funktion zurückgegeben.

Wir benötigen auch eine Funktion, um eine Vorlagendatei (wie message.txt) einzulesen und ein TemplateObjekt aus seinem Inhalt zurückzugeben.

Genau wie die vorherige Funktion verwendet diese einen Dateinamen als Argument.

Um die E-Mail zu senden, müssen Sie SMTP (Simple Mail Transfer Protocol) verwenden. Wie bereits erwähnt, bietet Python Bibliotheken für diese Aufgabe.

Im obigen Codefragment importieren Sie das smtplibund erstellen dann eine SMTP-Instanz, die eine SMTP-Verbindung kapselt. Als Parameter werden die Hostadresse und eine Portnummer verwendet, die vollständig von den SMPT-Einstellungen Ihres bestimmten E-Mail-Dienstanbieters abhängen. Im Fall von Outlook wäre Zeile 4 oben stattdessen:

s = smtplib.SMTP(host='smtp-mail.outlook.com', port=587)

Sie sollten die Hostadresse und die Portnummer Ihres E-Mail-Dienstanbieters verwenden, damit das Ganze funktioniert.

MY_ADDRESSund PASSWORDoben sind zwei Variablen aufgeführt, die die vollständige E-Mail-Adresse und das Kennwort des Kontos enthalten, das Sie verwenden möchten.

Jetzt wäre ein guter Zeitpunkt, um die Kontaktinformationen und die Nachrichtenvorlagen mit den oben definierten Funktionen abzurufen.

names, emails = get_contacts('mycontacts.txt') # read contacts message_template = read_template('message.txt')

Lassen Sie uns nun für jeden dieser Kontakte die E-Mail separat senden.

Für jede nameund email(von der Kontaktdatei), sind Sie ein MIMEMultipart Objekt erstellen, die Einrichtung von der From, To, SubjectContent-Type - Header als Schlüsselwort - Wörterbuch, und dann den Nachrichtentext an dem MIMEMultipartBefestigungsobjekt als Klartext. Vielleicht möchten Sie die Dokumentation lesen, um mehr über andere MIME-Typen zu erfahren, mit denen Sie experimentieren können.

Beachten Sie auch, dass ich in Zeile 10 oben ${PERSON_NAME}den tatsächlichen Namen ersetze, der mithilfe des Vorlagenmechanismus in Python aus der Kontaktdatei extrahiert wurde.

In diesem Beispiel lösche ich das MIMEMultipartObjekt und erstelle es jedes Mal neu, wenn Sie die Schleife durchlaufen.

Sobald dies erledigt ist, können Sie die Nachricht mit der praktischen Funktion send_message () des zuvor erstellten SMTP-Objekts senden.

Hier ist der vollständige Code:

Los geht's! Ich glaube, der Code ist jetzt ziemlich klar.

Fühlen Sie sich frei, es nach Bedarf zu kopieren und zu optimieren.

Neben den offiziellen Python-Dokumenten möchte ich auch diese Ressource erwähnen, die mir sehr geholfen hat.

Viel Spaß beim Codieren :)

Ich habe diesen Artikel ursprünglich hier veröffentlicht. Wenn Ihnen dieser Artikel gefallen hat, klicken Sie bitte auf das kleine Herz unten. Vielen Dank!