Python - E-Mail senden

Hallo dort, aufstrebende Python-Programmierer! Heute werden wir eine aufregende Reise in die Welt des E-Mail-Sendens mit Python antreten. Als euer freundlicher Nachbar und Computerlehrer bin ich begeistert, euch durch diesen Prozess zu führen. Glaubt mir, am Ende dieses Tutorials werdet ihr wie ein Profi E-Mails senden!

Python - Sending Email

E-Mail senden in Python

Lassen Sie uns mit den Grundlagen beginnen. E-Mails in Python zu senden, ist wie ein digitaler Postbote zu sein, aber anstatt von Haus zu Haus zu gehen, verwenden wir eine spezielle Python-Bibliothek namens smtplib. SMTP steht für Simple Mail Transfer Protocol, was nur eine elegante Art ist, zu sagen: "die Regeln für das Senden von Post über das Internet".

Hier ist ein einfaches Beispiel, um uns zu starten:

import smtplib

sender_email = "[email protected]"
receiver_email = "[email protected]"
password = "dein_passwort"
message = "Hallo, dies ist eine Test-E-Mail von Python!"

mit smtplib.SMTP("smtp.gmail.com", 587) als server:
server.starttls()
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, message)

Lassen Sie uns das aufbrechen:

  1. Wir importieren die smtplib-Bibliothek.
  2. Wir richten unsere Absender-E-Mail, Empfänger-E-Mail und das Passwort ein.
  3. Wir erstellen eine einfache Nachricht.
  4. Wir verbinden uns mit dem SMTP-Server von Gmail (mehr dazu später).
  5. Wir starten TLS für Sicherheit.
  6. Wir loggen uns in unser E-Mail-Konto ein.
  7. Schließlich senden wir die E-Mail!

Python smtplib.SMTP() Funktion

Die SMTP()-Funktion ist wie der Schlüssel zu unserer digitalen Poststelle. Sie stellt eine Verbindung zum SMTP-Server her, den wir verwenden möchten. Hier ist ein detaillierterer Blick:

import smtplib

server = smtplib.SMTP('smtp.gmail.com', 587)
print(server.ehlo())
server.starttls()
print(server.ehlo())

In diesem Beispiel:

  • Wir erstellen ein SMTP-Objekt für den Gmail-Server.
  • ehlo() ist wie "Hallo" an den Server zu sagen.
  • starttls() startet die TLS-Verschlüsselung für Sicherheit.

Das Python smtpd-Modul

Während smtplib für das Senden von E-Mails verwendet wird, ist smtpd für das Empfangen davon. Es ist wie die Einrichtung deines eigenen kleinen E-Mail-Servers! Hier ist ein einfaches Beispiel:

import asyncore
from smtpd import SMTPServer

class EmailServer(SMTPServer):
def process_message(self, peer, mailfrom, rcpttos, data, **kwargs):
print(f'Message from: {peer}')
print(f'Message addressed from: {mailfrom}')
print(f'Message addressed to  : {rcpttos}')
print(f'Message length        : {len(data)}')

server = EmailServer(('localhost', 1025), None)
asyncore.loop()

Dies richtet einen grundlegenden E-Mail-Server ein, der Informationen über empfangene E-Mails ausgibt. Es ist wie ein persönlicher Briefsortierraum zu haben!

Eine HTML-E-Mail mit Python senden

Jetzt machen wir unsere E-Mails mit etwas HTML schick:

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

sender_email = "[email protected]"
receiver_email = "[email protected]"
password = "dein_passwort"

message = MIMEMultipart("alternative")
message["Subject"] = "multipart test"
message["From"] = sender_email
message["To"] = receiver_email

text = "Hi there! This is a plain text email."
html = """\
<html>
<body>
<p>Hi there!<br>
This is an <b>HTML</b> email.
</p>
</body>
</html>
"""

part1 = MIMEText(text, "plain")
part2 = MIMEText(html, "html")

message.attach(part1)
message.attach(part2)

mit smtplib.SMTP("smtp.gmail.com", 587) als server:
server.starttls()
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, message.as_string())

Dieses Beispiel sendet eine E-Mail mit sowohl einer plain text- als auch einer HTML-Version. Es ist wie das Senden eines Briefes mit einer schicken Umschlag!

Dateianhänge als E-Mail senden

Was tun wir, wenn wir eine Datei zusammen mit unserer E-Mail senden möchten? Kein Problem! So geht's:

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

sender_email = "[email protected]"
receiver_email = "[email protected]"
password = "dein_passwort"

message = MIMEMultipart()
message["From"] = sender_email
message["To"] = receiver_email
message["Subject"] = "E-Mail mit Anhang"

body = "Dies ist eine E-Mail mit einem Anhang."
message.attach(MIMEText(body, "plain"))

filename = "dokument.pdf"  # Ersetzen durch deinen Dateinamen
attachment = open(filename, "rb")

part = MIMEBase("application", "octet-stream")
part.set_payload(attachment.read())

encoders.encode_base64(part)
part.add_header(
"Content-Disposition",
f"attachment; filename= {filename}",
)

message.attach(part)

mit smtplib.SMTP("smtp.gmail.com", 587) als server:
server.starttls()
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, message.as_string())

Dieses Skript hängt eine Datei an deine E-Mail an. Es ist wie das Hinzufügen eines Pakets zu deinem Brief!

E-Mail mit Gmail's SMTP-Server senden

Im Laufe dieses Tutorials haben wir den SMTP-Server von Gmail verwendet. Hier ist eine schnelle Referenztabelle für gängige SMTP-Server:

E-Mail-Anbieter SMTP-Server Port
Gmail smtp.gmail.com 587
Outlook smtp-mail.outlook.com 587
Yahoo Mail smtp.mail.yahoo.com 587

Beachtet, dass ihr bei der Verwendung von Gmail möglicherweise "Less secure app access" aktivieren oder ein "App Password" verwenden müsst, wenn ihr 2-Faktor-Authentifizierung aktiviert habt.

Und da habt ihr es, Leute! Ihr seid nun ausgerüstet, um wie ein Python-Profi E-Mails zu senden. Denkt daran, mit großer Macht kommt große Verantwortung - nutzt eure neuen E-Mail-Senden-Fähigkeiten weise! Happy coding, und möge eure E-Mails immer ihr Ziel erreichen!

Credits: Image by storyset