Python - Senden von E-Mails mit SMTP
Vorherige SeiteNächste Seite
Simple Mail Transfer Protocol (SMTP) ist ein Protokoll, das das Senden von E-Mails und das Weiterleiten von E-Mails zwischen Mailservern handhabt.
Python bietet smtplib Modul, das ein SMTP-Client-Sitzungsobjekt definiert, das verwendet werden kann, um E-Mails an jeden Internet-Rechner mit einem SMTP- oder ESMTP-Listener-Daemon zu senden.
Hier ist eine einfache Syntax, um ein SMTP-Objekt zu erstellen, das später zum Senden einer E-Mail verwendet werden kann −
import smtplib smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )
Hier ist das Detail der Parameter −
-
Host − Dies ist der Host, auf dem Ihr SMTP-Server läuft. Sie können die IP-Adresse des Hosts oder einen Domänennamen wie tutorialspoint.com angeben. Dies ist ein optionales Argument.
-
Port − Wenn Sie Host bereitstellen Argument, dann müssen Sie einen Port angeben, an dem der SMTP-Server lauscht. Normalerweise wäre dieser Port 25.
-
lokaler_Hostname − Wenn Ihr SMTP-Server auf Ihrem lokalen Rechner läuft, können Sie einfach localhost angeben ab dieser Option.
Ein SMTP-Objekt hat eine Instanzmethode namens sendmail , das normalerweise zum Versenden einer Nachricht verwendet wird. Es benötigt drei Parameter −
-
Der Absender − Ein String mit der Adresse des Absenders.
-
Die Empfänger − Eine Liste von Zeichenfolgen, eine für jeden Empfänger.
-
Die Nachricht − Eine Nachricht als Zeichenfolge, die wie in den verschiedenen RFCs angegeben formatiert ist.
Beispiel
Hier ist eine einfache Möglichkeit, eine E-Mail mit einem Python-Skript zu senden. Probieren Sie es einmal aus −
#!/usr/bin/python import smtplib sender = '[email protected]' receivers = ['[email protected]'] message = """From: From Person <[email protected]> To: To Person <[email protected]> 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"
Hier haben Sie eine einfache E-Mail mit dreifachen Anführungszeichen in eine Nachricht eingefügt und dabei darauf geachtet, die Kopfzeilen korrekt zu formatieren. Eine E-Mail erfordert einen Von , An , und Betreff Header, durch eine Leerzeile vom E-Mail-Text getrennt.
Um die Mail zu versenden, verwenden Sie smtpObj um sich mit dem SMTP-Server auf dem lokalen Rechner zu verbinden und dann sendmail zu verwenden -Methode zusammen mit der Nachricht, der Absenderadresse und der Zieladresse als Parameter (obwohl die Absender- und Empfängeradressen in der E-Mail selbst enthalten sind, werden diese nicht immer zum Weiterleiten von E-Mails verwendet).
Wenn Sie auf Ihrem lokalen Rechner keinen SMTP-Server betreiben, können Sie smtplib verwenden Client, um mit einem entfernten SMTP-Server zu kommunizieren. Sofern Sie keinen Webmail-Dienst (wie Hotmail oder Yahoo! Mail) verwenden, muss Ihr E-Mail-Anbieter Ihnen die Serverdetails für ausgehende E-Mails bereitgestellt haben, die Sie ihm wie folgt zur Verfügung stellen können −
smtplib.SMTP('mail.your-domain.com', 25)
Versenden einer HTML-E-Mail mit Python
Wenn Sie eine Textnachricht mit Python senden, wird der gesamte Inhalt als einfacher Text behandelt. Auch wenn Sie HTML-Tags in eine Textnachricht einfügen, wird diese als einfacher Text angezeigt und HTML-Tags werden nicht gemäß der HTML-Syntax formatiert. Aber Python bietet die Möglichkeit, eine HTML-Nachricht als eigentliche HTML-Nachricht zu senden.
Beim Senden einer E-Mail-Nachricht können Sie eine Mime-Version, einen Inhaltstyp und einen Zeichensatz angeben, um eine HTML-E-Mail zu senden.
Beispiel
Im Folgenden sehen Sie ein Beispiel zum Versenden von HTML-Inhalten als E-Mail. Probieren Sie es einmal aus −
#!/usr/bin/python import smtplib message = """From: From Person <[email protected]> To: To Person <[email protected]> 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 <b>This is HTML message.</b> <h1>This is headline.</h1> """ try: smtpObj = smtplib.SMTP('localhost') smtpObj.sendmail(sender, receivers, message) print "Successfully sent email" except SMTPException: print "Error: unable to send email"
Anhänge als E-Mail versenden
Um eine E-Mail mit gemischtem Inhalt zu versenden, muss Inhaltstyp eingestellt werden Header zu multipart/mixed . Dann können Text- und Anhangsabschnitte innerhalb von Grenzen angegeben werden .
Eine Grenze beginnt mit zwei Bindestrichen, gefolgt von einer eindeutigen Nummer, die nicht im Nachrichtenteil der E-Mail erscheinen darf. Eine abschließende Grenze, die den letzten Abschnitt der E-Mail kennzeichnet, muss ebenfalls mit zwei Bindestrichen enden.
Angehängte Dateien sollten mit pack("m") codiert werden Funktion, um vor der Übertragung base64-Codierung zu haben.
Beispiel
Es folgt das Beispiel, das eine Datei /tmp/test.txt sendet als Anhang. Probieren Sie es einmal aus −
#!/usr/bin/python import smtplib import base64 filename = "/tmp/test.txt" # Read a file and encode it into base64 format fo = open(filename, "rb") filecontent = fo.read() encodedcontent = base64.b64encode(filecontent) # base64 sender = '[email protected]' reciever = '[email protected]' marker = "AUNIQUEMARKER" body =""" This is a test email to send an attachement. """ # Define the main headers. part1 = """From: From Person <[email protected]> To: To Person <[email protected]> Subject: Sending Attachement MIME-Version: 1.0 Content-Type: multipart/mixed; boundary=%s --%s """ % (marker, marker) # Define the message action part2 = """Content-Type: text/plain Content-Transfer-Encoding:8bit %s --%s """ % (body,marker) # Define the attachment section 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, reciever, message) print "Successfully sent email" except Exception: print "Error: unable to send email"
Python
- Python-Datentypen
- Python-Operatoren
- Python-pass-Anweisung
- Python-Funktionsargumente
- Python-Wörterbuch
- Python-Ausnahmebehandlung Mit der try-, except- und finally-Anweisung
- TMP006-Temperatursensor-Python-Bibliothek mit Raspberry Pi,
- Python- und Raspberry Pi-Temperatursensor
- Python-Durchschnitt:So finden Sie den DURCHSCHNITT einer Liste in Python
- Tauschen Sie zwei Python-Variablen aus, ohne eine dritte zu verwenden