Senden einer E-Mail aus einem Python3 Skript

In diesem Beitrag möchte ich dir ausführlich zeigen, wie du eine E-Mail aus einem Python3 Skript senden kannst. Des Weiteren zeige ich dir auch wie du eine E-Mail inkl. Dateianhänge absenden kannst.

Python3 - E-Mail senden
Python3 – E-Mail senden

E-Mail-Adresse zum Testen

Für diesen Beitrag verwende ich eine kostenfreie E-Mail von web.de. Du kannst natürlich auch jeden anderen E-Mail Dienst nutzen.

Bei der Verwendung von Gmail.com musst du jedoch noch eine zusätzliche App einrichten, was den Aufwand etwas erhöht.

Die Daten des SMTP Ausgangsservers von web.de sind:

Serversmtp.web.de
Port587
VerschlüsselungSTARTTLS, TLS oder Verschlüsselung
Daten des SMTP Ausgangsservers von web.de

aktivieren von Pop3/IMAP in web.de

Damit jedoch das Absenden einer E-Mail von einem externen Programm mit einem web.de Account möglich ist, muss die Einstellung “POP3 und IMAP erlauben” gesetzt (Haken ist gesetzt) werden.

Einstellung für die Aktivierung von Pop3 / IMAP in web.de
Einstellung für die Aktivierung von Pop3 / IMAP in web.de

Senden einer E-Mail mit Text

Zunächst möchte ich dir zeigen wie du einen einfachen Text per E-Mail senden kannst.

Dabei müssen Zeilenumbrüche in dem Text per “\n” ersetzt oder gesetzt werden!

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

# Serverdaten
smtpServer = "smtp.web.de"
smtpPort = 587

# Zugangsdaten
username = "abc@web.de"
password = "xyz#567"

# Sender & Empfänger
sender = "mytestmail0815@web.de"
reciever = "info@draeger-it.blog"

# Betreff & Inhalt
subject = "Hallo Welt!"
body = "Hier steht ein Text. \n Mit einem Zeilenumbruch."

# Message Objekt für die E-Mail
# später kann an dieses Objekt eine
# oder mehrere Dateien angehängt
# werden.
msg = MIMEMultipart()
msg['Subject'] = subject
msg['From'] = sender
msg['To'] = reciever

part = MIMEText(body, 'plain')
msg.attach(part)

# Erzeugen einer Mail Session
smtpObj = smtplib.SMTP(smtpServer, smtpPort)
# Debuginformationen auf der Konsole ausgeben
smtpObj.set_debuglevel(1)
# Wenn der Server eine Authentifizierung benötigt dann...
smtpObj.starttls()
smtpObj.login(username, password)

# absenden der E-Mail
smtpObj.sendmail(sender, reciever, msg.as_string())

Wenn das Skript nun ausgeführt wird, dann erscheint beim Empfänger nachfolgende E-Mail.

Ansicht der E-Mail im Client

Absenden von HTML Mails

Im ersten Beispiel habe ich gezeigt wie du eine einfache Mail mit einem “Plaintext” senden kannst. Diese Form des Textes ist recht sicher da so ziemlich jeder Mail Client diesen Text anzeigen lassen kann.

Wenn es etwas schöner sein soll, dann greift man auf HTML Text zurück. Hier hat man deutlich mehr Möglichkeiten seine E-Mail zu gestalten.

body_html = "<html><body>"\
    "<h1>Eine Überschrift</h1>"\
    "<p style='color:red'>Ein Text in der Schriftfarbe rot</p>"\
    "<div style='background-color:green'>Hier ist ein Text mit einer Hintergrundfarbe.</div>"\
    "</body></html>"

html_part = MIMEText(body_html, 'html')
msg.attach(html_part)
E-Mail mit HTML Content
E-Mail mit HTML Content

Absenden einer E-Mail mit Dateianhängen

Möchte man nun eine Datei per E-Mail versenden, so muss diese als weiteren “part” angehängt werden.

Jedoch muss diese Datei zuvor in BASE64 Codiert werden.

from email.mime.base import MIMEBase
from email import encoders
...
filename = "test.txt"

file_part = MIMEBase('application', "octet-stream")
file_part.set_payload(open(filename, "rb").read())
encoders.encode_base64(part)

file_part.add_header('Content-Disposition', 'attachment; filename="'+filename+'"')
msg.attach(file_part)
...
E-Mail mit Dateinanhang und HTML Content
E-Mail mit Dateinanhang und HTML Content

fertiges Python3 Skript zum senden von E-Mails mit Dateianhänge

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders

# Serverdaten
smtpServer = "smtp.web.de"
smtpPort = 587

# Zugangsdaten
username = "abc@web.de"
password = "xyz#123"

# Sender & Empfänger
sender = "mytestmail0815@web.de"
reciever = "info@draeger-it.blog"

# Betreff
subject = "Hallo Welt!"

# Inhalt der Mail
body = "Hier steht ein Text. \n Mit einem Zeilenumbruch."
body_html = "<html><body>"\
    "<h1>Eine Überschrift</h1>"\
    "<p style='color:red'>Ein Text in der Schriftfarbe rot</p>"\
    "<div style='background-color:green'>Hier ist ein Text mit einer Hintergrundfarbe.</div>"\
    "</body></html>"

# Message Objekt für die E-Mail
# später kann an dieses Objekt eine
# oder mehrere Dateien angehängt
# werden.
msg = MIMEMultipart()
msg['Subject'] = subject
msg['From'] = sender
msg['To'] = reciever

# Plain Text
part = MIMEText(body, 'plain')
msg.attach(part)

# HTML Text
html_part = MIMEText(body_html, 'html')
msg.attach(html_part)

# Dateianhang
filename = "test.txt"
file_part = MIMEBase('application', "octet-stream")
file_part.set_payload(open(filename, "rb").read())
encoders.encode_base64(part)
file_part.add_header('Content-Disposition', 'attachment; filename="'+filename+'"')
msg.attach(file_part)

# Erzeugen einer Mail Session
smtpObj = smtplib.SMTP(smtpServer, smtpPort)
# Debuginformationen auf der Konsole ausgeben
smtpObj.set_debuglevel(1)
# Wenn der Server eine Authentifizierung benötigt dann...
smtpObj.starttls()
smtpObj.login(username, password)

# absenden der E-Mail
smtpObj.sendmail(sender, reciever, msg.as_string())

Ein Kommentar

  1. Herzlichen Dank für diese gute Schritt-für-Schritt-Anleitung! So kann auch ein Programmier-Anfänger wie ich das Thema gut verstehen 😀 Vielen Dank für den Beitrag und weiter so!
    Liebe Grüße
    Julius

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.