E-Mails mit Python und SMTP versenden: Schnellstart
Einführung
Simple Mail Transfer Protocol (SMTP) ist ein Protokoll zum Versenden und Routen von E-Mails zwischen Mailservern.
Python stellt das Modul smtplib bereit, das ein SMTP-Client-Session-Objekt definiert, um E-Mails an jede Internet-Maschine mit SMTP- oder ESMTP-Listener-Daemon zu senden.
SMTP-Objekt erstellen
import smtplib smtpObj = smtplib.SMTP([host[, port[, local_hostname]]])
Parameter
- host – Host mit Ihrem SMTP-Server. IP-Adresse oder Domainname (z. B.
tutorialspoint.com). Optional. - port – Wenn
hostangegeben, Port, auf dem der SMTP-Server lauscht. Üblicherweise 25. - local_hostname – Wenn SMTP-Server lokal läuft,
localhostangeben.
Ein SMTP-Objekt hat die Instanzmethode sendmail für den Versand. Sie nimmt drei Parameter:
- sender – String mit Absenderadresse.
- receivers – Liste von Strings, einer pro Empfänger.
- message – Nachricht als String, formatiert gemäß RFCs.
Beispiel: Einfache E-Mail senden
#!/usr/bin/python import smtplib sender = 'from@fromdomain.com' receivers = ['to@todomain.com'] message = """From: From PersonTo: To Person Subject: SMTP e-mail test This is a test e-mail message. """ try: smtpObj = smtplib.SMTP('localhost') smtpObj.sendmail(sender, receivers, message) print("Successfully sent email") except SMTPException: print("Error: unable to send email")
Die E-Mail enthält From, To, Subject Header, getrennt vom Body durch eine Leerzeile.
Sie nutzen smtpObj für die Verbindung zum lokalen SMTP-Server und sendmail mit Nachricht, Absender- und Zieladresse.
Falls kein lokaler SMTP-Server läuft, können Sie einen entfernten Server nutzen:
smtplib.SMTP('mail.your-domain.com', 25)
HTML-E-Mail versenden
Bei Textnachrichten wird der gesamte Inhalt als einfacher Text behandelt. HTML-Tags werden nicht formatiert. Python ermöglicht den Versand als echtes HTML.
Geben Sie MIME-Version, Content-Type und Charset an.
Beispiel: HTML-E-Mail
#!/usr/bin/python import smtplib message = """From: From PersonTo: To Person MIME-Version: 1.0 Content-type: text/html Subject: SMTP HTML e-mail test This is an e-mail message to be sent in HTML format This is HTML message. This is headline.
""" try: smtpObj = smtplib.SMTP('localhost') smtpObj.sendmail(sender, receivers, message) print("Successfully sent email") except SMTPException: print("Error: unable to send email")
E-Mail mit Anhängen versenden
Für gemischten Inhalt setzen Sie Content-type Header auf multipart/mixed. Text- und Anhangsabschnitte werden innerhalb von Boundaries spezifiziert.
Anhänge sollten mit pack("m") (base64) kodiert werden vor der Übertragung.
Beispiel: Datei als Anhang
#!/usr/bin/python import smtplib import base64 filename = "/tmp/test.txt" fo = open(filename, "rb") filecontent = fo.read() encodedcontent = base64.b64encode(filecontent) sender = 'webmaster@tutorialpoint.com' receiver = 'amrood.admin@gmail.com' marker = "AUNIQUEMARKER" body = """This is a test email to send an attachment.""" part1 = """From: From PersonTo: To Person Subject: Sending Attachment MIME-Version: 1.0 Content-Type: multipart/mixed; boundary=%s --%s """ % (marker, marker) part2 = """Content-Type: text/plain Content-Transfer-Encoding: 8bit %s --%s """ % (body, marker) part3 = """Content-Type: multipart/mixed; name="%s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=%s %s --%s-- """ % (filename, filename, encodedcontent, marker) message = part1 + part2 + part3 try: smtpObj = smtplib.SMTP('localhost') smtpObj.sendmail(sender, receiver, message) print("Successfully sent email") except Exception: print("Error: unable to send email")
Python
- Python-Datentypen meistern: Praxisleitfaden
- Python-Operatoren meistern: Umfassender Leitfaden
- Python pass-Statement meistern: Praxisleitfaden
- Python-Funktionsargumente meistern: Positional, Keyword & Default-Parameter
- Python-Dictionaries meistern: Erstellung, Manipulation und fortgeschrittene Techniken
- Python Exception Handling meistern: try, except, else und finally erklärt
- TMP006 Infrarot-Temperatursensor mit Raspberry Pi: Python Library & Setup Guide
- Fern-Temperatursensor mit Raspberry Pi & Python bauen – Schritt-für-Schritt-Anleitung
- Durchschnitt berechnen in Python: Praktischer Leitfaden
- Zwei Python-Variablen tauschen ohne temporäre Variable – Mühelos