CodeGym /Kurse /Python SELF DE /Arbeiten mit E-Mail

Arbeiten mit E-Mail

Python SELF DE
Level 24 , Lektion 2
Verfügbar

8.1 E-Mails lesen

Ich denke, wir haben die Grundlagen der Netzwerkarbeit schon gut verstanden. Lass uns etwas Interessanterem zuwenden — im Netz gibt es so viel Spannendes. Was hältst du davon, E-Mails zu lesen und zu senden?

E-Mail gibt es seit 50 Jahren, 20 Jahre bevor es den ersten Browser gab. Damals benutzte man spezielle Programme zum Versenden von E-Mails. Was bedeutet das für uns? Na ja, der Standard (Protokoll) für den Umgang mit E-Mails ist einfach wie drei Groschen.

Das POP3 (Post Office Protocol version 3) Protokoll wird verwendet, um E-Mails von einem Mailserver zu holen. Im Gegensatz zu IMAP lädt POP3 normalerweise die E-Mails auf den lokalen Computer herunter und löscht sie vom Server. In Python kannst du die Bibliothek poplib für die Arbeit mit POP3 verwenden.

Hinweis: Im Gegensatz zu POP3 ermöglicht das IMAP-Protokoll (Internet Message Access Protocol) die Speicherung von E-Mails auf dem Server und die Synchronisierung ihres Status zwischen Geräten. IMAP ist bequemer, wenn du E-Mails von verschiedenen Geräten aus liest, während POP3 besser geeignet ist, um E-Mails lokal auf einem einzigen Gerät zu speichern.

Grundlegende Schritte, um eine Liste von E-Mails zu erhalten:

  • Verbindung zum Mailserver herstellen.
  • Authentifizierung.
  • Erhalt der E-Mail-Liste.
  • Herunterladen und Lesen von E-Mails.
  • Vom Server trennen.

Für unser erstes Programm benötigen wir zwei Bibliotheken: poplib und email. Wenn du sie nicht hast — installiere sie. Wie man den pip-Manager benutzt, weißt du bereits.

Wichtig: Beachte immer die Sicherheitsmaßnahmen beim Umgang mit E-Mails. Speichere niemals Passwörter im Klartext im Code. Verwende Umgebungsvariablen oder sichere Speicherorte für Anmeldedaten. Stelle auch sicher, dass dein Code nicht in die Öffentlichkeit gelangt, um ein Leck vertraulicher Informationen zu vermeiden.

1. Verbindung und Authentifizierung:

Wir verbinden uns mit dem Mailserver über SSL und melden uns mit den angegebenen Anmeldedaten im Postfach an.


mailbox = poplib.POP3_SSL(pop3_server)
mailbox.user(username)
mailbox.pass_(password)  # Verwenden wir pass_, um Konflikte mit dem Schlüsselwort pass in Python zu vermeiden

2. Abrufen von Informationen über das Postfach:

Wir erhalten die Anzahl der E-Mails im Postfach.


num_messages = len(mailbox.list()[1])
print(f"Anzahl der E-Mails: {num_messages}")

3. Herunterladen und Lesen von E-Mails:

Wir laden die letzte E-Mail herunter und lesen sie.


# Beispiel: Lesen der letzten E-Mail
if num_messages > 0:
    response, lines, octets = mailbox.retr(num_messages)
    message = '\n'.join(line.decode('utf-8') for line in lines)
    print("Inhalt der letzten E-Mail:")
    print(message)

Zum Parsen und Anzeigen des Inhalts gibt es eine spezielle Bibliothek — email. Sie kann den Inhalt von E-Mails und deren Anhängen dekodieren, einschließlich Kopfzeilen und Textkörper.

So sieht die finale Version unseres E-Mail-Clients aus.


import poplib

# Anmeldedaten
username = 'your_email@example.com'
password = 'your_password'
            
# Verbindung zum Gmail-Mailserver herstellen
pop3_server = 'pop.gmail.com'
mailbox = poplib.POP3_SSL(pop3_server, 995)
            
# Anmelden im Postfach
mailbox.user(username)
mailbox.pass_(password)  # Verwenden wir pass_, um Konflikte mit dem Schlüsselwort pass in Python zu vermeiden
            
# Abrufen von Informationen über das Postfach
num_messages = len(mailbox.list()[1])
print(f"Anzahl der E-Mails: {num_messages}")
            
# Beispiel: Lesen der letzten E-Mail
if num_messages > 0:
    response, lines, octets = mailbox.retr(num_messages)
    message = '\n'.join(line.decode('utf-8') for line in lines)
    print("Inhalt der letzten E-Mail:")
    print(message)
            
# Verbindung trennen
mailbox.quit()

Du kannst versuchen, deine E-Mails zu lesen, gib einfach die richtige POP3-Server an. Im obigen Beispiel habe ich die Daten des Gmail-Servers angegeben. Wenn du einen anderen Mailserver hast, lassen sich dessen Daten leicht im Internet finden.

8.2 E-Mails senden

Um E-Mails mit dem Protokoll SMTP (Simple Mail Transfer Protocol) zu versenden, kannst du in Python die eingebaute Bibliothek smtplib verwenden. Dieses Modul bietet Funktionen zum Aufbau einer Verbindung zum SMTP-Server, zur Authentifizierung und zum Versenden von E-Mails.

Grundlegende Schritte zum Versenden von E-Mails:

  • Verbindung zum SMTP-Server herstellen.
  • Authentifizierung.
  • Nachricht erstellen.
  • Nachricht senden.
  • Verbindung schließen.

1. Verbindung zum SMTP-Server:

Wir verbinden uns mit dem SMTP-Server und wechseln zu einer sicheren Verbindung mit TLS.


server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls()  # Sichere Verbindung

2. Authentifizierung:

Wir melden uns mit unseren Anmeldedaten am SMTP-Server an.


server.login(username, password)

3. Eine einfache Nachricht als String erstellen:


message = f"From: {from_addr}\nTo: {to_addr}\nSubject: {subject}\n\n{body}"

4. Nachricht senden:


server.sendmail(from_addr, to_addr, message)

5. Verbindung schließen:


server.quit()

Sieht etwas einfacher aus als letztes Mal, was erfreulich ist.

Der gesamte Code, einschließlich Fehlerbehandlung, sieht so aus:


import smtplib

# Anmeldedaten
smtp_server = 'smtp.gmail.com'
smtp_port = 587
username = 'your_email@gmail.com'
password = 'your_app_password'  # Verwende ein App-Passwort
            
# Absender- und Empfängeradresse
from_addr = 'your_email@gmail.com'
to_addr = 'recipient@example.com'
            
# Betreff und E-Mail-Text
subject = 'Betreff der E-Mail'
body = 'Das ist der Text der E-Mail.'
            
# Nachricht als String erstellen
message = f"From: {from_addr}\nTo: {to_addr}\nSubject: {subject}\n\n{body}"
            
try:
    # Verbindung zum SMTP-Server herstellen
    server = smtplib.SMTP(smtp_server, smtp_port)
    server.starttls()  # Sichere Verbindung
            
    # Authentifizierung
    server.login(username, password)
            
    # Nachricht senden
    server.sendmail(from_addr, to_addr, message)
    print("E-Mail erfolgreich gesendet!")
except Exception as e:
    print(f"Fehler beim Senden der E-Mail: {e}")
finally:
    # Verbindung schließen
    server.quit()

Der Großteil des Codes hier sind Kommentare und Servereinstellungen, du kannst eine E-Mail in 5 Zeilen senden. Versuch es mal — es ist wirklich interessant.

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION